[flexcoders] get rowIndex in datagird's mouseOver Function

2009-01-12 Thread Dharmendra Chauhan
My requiremnt is to get rowIndex in mouseover Function in DataGird so
that I can use that index to select perticuler row of 
datagrid.ItemRollover Function does not get called when I hold left 
mouse key and drag it over dg. 
I want to provide functionality where in user can select multiple 
rows in dg by holding left mouse key and dragging over the dg. 

I have also designed a sample app for this but Only issue with 
approach is that It(mOver.target.listData.rowIndex) does not 
consistently  return rowIndex ,sometimes It throws error `Property 
listData not found on mx.controls.listClasses.ListBaseContentHolder 
and there is no default value  as a result of it ,few row left 
unselected. 

This error occurs only when user tries to select rows with fast 
mouse movement. 


Here is my sample app 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  

RE: [flexcoders] get rowIndex in datagird's mouseOver Function

2009-01-12 Thread Alex Harui
mouseEventToItemRenderer

From: flexcoders@yahoogroups.com [mailto:flexcod...@yahoogroups.com] On Behalf 
Of Dharmendra Chauhan
Sent: Saturday, January 10, 2009 10:34 AM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] get rowIndex in datagird's mouseOver Function


My requiremnt is to get rowIndex in mouseover Function in DataGird so
that I can use that index to select perticuler row of
datagrid.ItemRollover Function does not get called when I hold left
mouse key and drag it over dg.
I want to provide functionality where in user can select multiple
rows in dg by holding left mouse key and dragging over the dg.

I have also designed a sample app for this but Only issue with
approach is that It(mOver.target.listData.rowIndex) does not
consistently return rowIndex ,sometimes It throws error `Property
listData not found on mx.controls.listClasses.ListBaseContentHolder
and there is no default value as a result of it ,few row left
unselected.

This error occurs only when user tries to select rows with fast
mouse movement.

Here is my sample app 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