[flexcoders] Re: Data Grid Issue
Hi Sanjay, Thanks lot for you reply. Please share that piece of code where in you are storing the index of selected row at the respective index of array. How did you u get the row which need to be selected, are you also calling a method on mouseOver function. I desperately need this functionality in my project. Please share your sample app if possible or have a look in my code below, please point me to the location where I need to focus. Regards, Dharmendra ?xml version=1.0 encoding=utf-8? mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; layout=absolute creationComplete=init() backgroundColor=#b3b4ae mx:Script ![CDATA[ import mx.charts.HitData; import mx.controls.dataGridClasses.DataGridItemRenderer; import mx.events.ListEvent; import flash.utils.describeType; import flash.utils.getDefinitionByName; import mx.controls.Alert; import mx.formatters.DateFormatter; import mx.collections.ArrayCollection; // include MatsFormatter.as var selectedArr:Array = new Array(); var arrCol:ArrayCollection ; function init():void{ arrCol = new ArrayCollection([{name:'AA', age:25}, {name:'BB', age:15}, {name:'CC', age:23}, {name:'DD', age:25}, {name:'EE', age:15}, {name:'FF', age:23}, {name:'GG', age:25}, {name:'HH', age:15}, {name:'II', age:23}]); dg.dataProvider = arrCol; } var isMouseDown:Boolean = false; public function mouseDownFunc (mDn:flash.events.MouseEvent ):void{ //Alert.show(mouseDownFunc); isMouseDown = true; } public function mouseUpFunc (mUp:flash.events.MouseEvent ):void{ // Alert.show(mouseUpFunc); isMouseDown = false; // Work Around to select iterleaved unselected row /* var selectedArr2:Array = new Array(); var firstRowIndex :int = dg.selectedIndices[0] var lastRowIndex :int = dg.selectedIndices [dg.selectedIndices.length -1 ] if(firstRowIndex lastRowIndex){ for(var i:int = firstRowIndex; firstRowIndex= lastRowIndex;firstRowIndex++) selectedArr2.push(firstRowIndex); }else{ for(var j:int = lastRowIndex; lastRowIndex= firstRowIndex;lastRowIndex++) selectedArr2.push(lastRowIndex); } dg.selectedIndices = selectedArr2; */ } public function mouseOverFunc (mOver:MouseEvent,dgCol:ListEvent = null ):void{ var rend:Object; if(isMouseDown){ try{ selectedArr = dg.selectedIndices; selectedArr.push(mOver.target.listData.rowIndex); dg.selectedIndices = selectedArr; }catch(e:Error){ // rend = mOver.relatedObject ; } } } // Deprecated /* public function itemRollOverFunc(itmRollOver:ListEvent):void { if(isMouseDown){ try{ selectedArr = dg.selectedIndices; selectedArr.push(itmRollOver.rowIndex); dg.selectedIndices = selectedArr; }catch(e:Error){ trace(e.getStackTrace()); } } } */ ]] /mx:Script mx:Style DataGrid { backgroundColor:#b3b4ae; borderColor:#66696B; verticalGridLineColor :#808080; horizontalGridLineColor :#808080; themeColor:#0A246A; borderStyle:solid; fontSize: 8; headerStyleName: dgHeaderStyles; } .dgHeaderStyles { fontSize: 10; textAlign: left; backgroundColor: #d4d0c8; fontFamily :san Sarif; } /mx:Style !--mouseDown=mouseDownFunc(event) mouseUp=mouseUpFunc (event) mouseOver=mouseOverFunc(event)-- mx:Panel layout=absolute title=MATS Trade Management Console id=gridPanel left=5 right=5 top=5 bottom=5 themeColor=#B3B4AE mx:DataGrid width=50% height=50% headerColors=[#d4d0c8,#d4d0c8] horizontalScrollPolicy=auto allowMultipleSelection=true id=dg horizontalGridLines=truerowHeight=30
[flexcoders] Re: Data Grid Issue
Here is complete code:- ?xml version=1.0 encoding=utf-8? mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; layout=absolute creationComplete=init() backgroundColor=#b3b4ae mx:Script ![CDATA[ import mx.charts.HitData; import mx.controls.dataGridClasses.DataGridItemRenderer; import mx.events.ListEvent; import flash.utils.describeType; import flash.utils.getDefinitionByName; import mx.controls.Alert; import mx.formatters.DateFormatter; import mx.collections.ArrayCollection; // include MatsFormatter.as var selectedArr:Array = new Array(); var arrCol:ArrayCollection ; function init():void{ arrCol = new ArrayCollection([{name:'AA', age:25}, {name:'BB', age:15}, {name:'CC', age:23}, {name:'DD', age:25}, {name:'EE', age:15}, {name:'FF', age:23}, {name:'GG', age:25}, {name:'HH', age:15}, {name:'II', age:23}]); dg.dataProvider = arrCol; } var isMouseDown:Boolean = false; public function mouseDownFunc (mDn:flash.events.MouseEvent ):void{ //Alert.show(mouseDownFunc); isMouseDown = true; } public function mouseUpFunc (mUp:flash.events.MouseEvent ):void{ // Alert.show(mouseUpFunc); isMouseDown = false; // Work Around to select iterleaved unselected row /* var selectedArr2:Array = new Array(); var firstRowIndex :int = dg.selectedIndices[0] var lastRowIndex :int = dg.selectedIndices [dg.selectedIndices.length -1 ] if(firstRowIndex lastRowIndex){ for(var i:int = firstRowIndex; firstRowIndex= lastRowIndex;firstRowIndex++) selectedArr2.push(firstRowIndex); }else{ for(var j:int = lastRowIndex; lastRowIndex= firstRowIndex;lastRowIndex++) selectedArr2.push(lastRowIndex); } dg.selectedIndices = selectedArr2; */ } public function mouseOverFunc (mOver:MouseEvent,dgCol:ListEvent = null ):void{ var rend:Object; if(isMouseDown){ try{ selectedArr = dg.selectedIndices; selectedArr.push(mOver.target.listData.rowIndex); dg.selectedIndices = selectedArr; }catch(e:Error){ // rend = mOver.relatedObject ; } } } /* public function itemRollOverFunc (itmRollOver:ListEvent):void{ if(isMouseDown){ try{ selectedArr = dg.selectedIndices; selectedArr.push(itmRollOver.rowIndex); dg.selectedIndices = selectedArr; }catch(e:Error){ trace(e.getStackTrace()); } } } */ ]] /mx:Script mx:Style DataGrid { backgroundColor:#b3b4ae; borderColor:#66696B; verticalGridLineColor :#808080; horizontalGridLineColor :#808080; themeColor:#0A246A; borderStyle:solid; fontSize: 8; headerStyleName: dgHeaderStyles; } .dgHeaderStyles { fontSize: 10; textAlign: left; backgroundColor: #d4d0c8; fontFamily :san Sarif; } /mx:Style mx:Panel layout=absolute title=MATS Trade Management Console id=gridPanel left=5 right=5 top=5 bottom=5 themeColor=#B3B4AE mx:DataGrid width=50% height=50% headerColors=[#d4d0c8,#d4d0c8] horizontalScrollPolicy=auto allowMultipleSelection=true id=dg horizontalGridLines=truerowHeight=30 selectionColor=#FF top=0 bottom=0 mouseDown=mouseDownFunc(event) mouseUp=mouseUpFunc(event) mouseOver=mouseOverFunc(event) mx:columns mx:DataGridColumn id=status wordWrap=false headerText=Name dataField=name/ mx:DataGridColumnid=age dataField=age headerText=Age/ /mx:columns /mx:DataGrid /mx:Panel /mx:Application Regards, Dharmendra --- In flexcoders@yahoogroups.com, Dharmendra Chauhan chauhan_i...@... wrote:
RE: [flexcoders] Re: Data Grid Issue
The renderers don't fully cover the DG so parts of the underlying and parenting ListBaseContentHolder show through so the target won't always be an IListItemRenderer. mouseEventToItemRenderer will probably help you resolve the mouse to a target renderer From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf Of Dharmendra Chauhan Sent: Tuesday, January 13, 2009 10:31 AM To: flexcoders@yahoogroups.com Subject: [flexcoders] Re: Data Grid Issue Here is complete code:- ?xml version=1.0 encoding=utf-8? mx:Application xmlns:mx=http://www.adobe.com/2006/mxml; layout=absolute creationComplete=init() backgroundColor=#b3b4ae mx:Script ![CDATA[ import mx.charts.HitData; import mx.controls.dataGridClasses.DataGridItemRenderer; import mx.events.ListEvent; import flash.utils.describeType; import flash.utils.getDefinitionByName; import mx.controls.Alert; import mx.formatters.DateFormatter; import mx.collections.ArrayCollection; // include MatsFormatter.as var selectedArr:Array = new Array(); var arrCol:ArrayCollection ; function init():void{ arrCol = new ArrayCollection([{name:'AA', age:25}, {name:'BB', age:15}, {name:'CC', age:23}, {name:'DD', age:25}, {name:'EE', age:15}, {name:'FF', age:23}, {name:'GG', age:25}, {name:'HH', age:15}, {name:'II', age:23}]); dg.dataProvider = arrCol; } var isMouseDown:Boolean = false; public function mouseDownFunc (mDn:flash.events.MouseEvent ):void{ //Alert.show(mouseDownFunc); isMouseDown = true; } public function mouseUpFunc (mUp:flash.events.MouseEvent ):void{ // Alert.show(mouseUpFunc); isMouseDown = false; // Work Around to select iterleaved unselected row /* var selectedArr2:Array = new Array(); var firstRowIndex :int = dg.selectedIndices[0] var lastRowIndex :int = dg.selectedIndices [dg.selectedIndices.length -1 ] if(firstRowIndex lastRowIndex){ for(var i:int = firstRowIndex; firstRowIndex= lastRowIndex;firstRowIndex++) selectedArr2.push(firstRowIndex); }else{ for(var j:int = lastRowIndex; lastRowIndex= firstRowIndex;lastRowIndex++) selectedArr2.push(lastRowIndex); } dg.selectedIndices = selectedArr2; */ } public function mouseOverFunc (mOver:MouseEvent,dgCol:ListEvent = null ):void{ var rend:Object; if(isMouseDown){ try{ selectedArr = dg.selectedIndices; selectedArr.push(mOver.target.listData.rowIndex); dg.selectedIndices = selectedArr; }catch(e:Error){ // rend = mOver.relatedObject ; } } } /* public function itemRollOverFunc (itmRollOver:ListEvent):void{ if(isMouseDown){ try{ selectedArr = dg.selectedIndices; selectedArr.push(itmRollOver.rowIndex); dg.selectedIndices = selectedArr; }catch(e:Error){ trace(e.getStackTrace()); } } } */ ]] /mx:Script mx:Style DataGrid { backgroundColor:#b3b4ae; borderColor:#66696B; verticalGridLineColor :#808080; horizontalGridLineColor :#808080; themeColor:#0A246A; borderStyle:solid; fontSize: 8; headerStyleName: dgHeaderStyles; } .dgHeaderStyles { fontSize: 10; textAlign: left; backgroundColor: #d4d0c8; fontFamily :san Sarif; } /mx:Style mx:Panel layout=absolute title=MATS Trade Management Console id=gridPanel left=5 right=5 top=5 bottom=5 themeColor=#B3B4AE mx:DataGrid width=50% height=50% headerColors=[#d4d0c8,#d4d0c8] horizontalScrollPolicy=auto allowMultipleSelection=true id=dg horizontalGridLines=true rowHeight=30 selectionColor=#FF top=0 bottom=0 mouseDown=mouseDownFunc(event) mouseUp=mouseUpFunc(event) mouseOver=mouseOverFunc(event) mx:columns mx:DataGridColumn id=status wordWrap=false headerText=Name dataField=name/ mx:DataGridColumn id=age dataField=age headerText=Age/ /mx:columns /mx:DataGrid /mx:Panel /mx:Application Regards, Dharmendra --- In flexcoders@yahoogroups.commailto:flexcoders%40yahoogroups.com, Dharmendra Chauhan chauhan_i...@... wrote: Hello, I have designed a custom dataGird which allows user to select multiple row without shift key. that meas user just need to right click the mouse and drag it over the grid. For this I have override mouseOverHandler Function in my dataGrid. override protected function mouseOverHandler (event:MouseEvent):void { var selectedArr:Array = new Array(); if(isMouseDown){ try{ selectedArr = dg.selectedIndices; selectedArr.push(mOver.target.listData.rowIndex); dg.selectedIndices = selectedArr; }catch(e:Error){ } } } Issue wich I have been facing is 'mOver.target.listData.rowIndex' does not consistently return rowIndex ,whenever I move mouse with fast pace 1 ) it throws an error Property listData not found on mx.controls.listClasses.ListBaseContentHolder and there is no default value . 2) Some dataGrid does not dispatch mouseOver as a result mouseUpHandler does get called. I hope you are convinced with observation.Please let me know you have any workAound for the above issue. Regards, Dharmendra
[flexcoders] Re: Data Grid Issue
Hello Dharmendra, I have done this type of functionality in Flex 2. That functionality was like :: User can select multiple rows on a single click without pressing SHIFT key and when user again click on the selected row it gets deselected. for that functionality I have not override any method. I have just created a method Array as you have done and stored the index of selected row at the respective index of array. thereafter asigned that array to DG's selectedIndices. Cheers Sanjay Sharma --- In flexcoders@yahoogroups.com, Dharmendra Chauhan chauhan_i...@... wrote: Hello, I have designed a custom dataGird which allows user to select multiple row without shift key. that meas user just need to right click the mouse and drag it over the grid. For this I have override mouseOverHandler Function in my dataGrid. override protected function mouseOverHandler(event:MouseEvent):void { var selectedArr:Array = new Array(); if(isMouseDown){ try{ selectedArr = dg.selectedIndices; selectedArr.push(mOver.target.listData.rowIndex); dg.selectedIndices = selectedArr; }catch(e:Error){ } } } Issue wich I have been facing is 'mOver.target.listData.rowIndex' does not consistently return rowIndex ,whenever I move mouse with fast pace 1 ) it throws an error Property listData not found on mx.controls.listClasses.ListBaseContentHolder and there is no default value . 2) Some dataGrid does not dispatch mouseOver as a result mouseUpHandler does get called. I hope you are convinced with observation.Please let me know you have any workAound for the above issue. Regards, Dharmendra