重写了DataGrid,主要是为了得到DataGrid的listItems属性,listItems保存了当前现显示的每一行的信息,还用了个ArrayCollection保存被选中了行的信息。
MyDataGrid.as
- package flex.components.checkdatagrid
- {
- import mx.collections.ArrayCollection;
- import mx.controls.Alert;
- import mx.controls.DataGrid;
- public class MyDataGrid extends DataGrid
- {
- protected var arrColl:ArrayCollection = null; //保存被选中的信息
- public function MyDataGrid()
- {
- super();
- arrColl = new ArrayCollection();
- }
- //方法名不该取这个的
- public function get listRendererArray():Array{
- return listItems;
- }
- //add
- public function addToSelected(item:Object):void{
- if(arrColl.getItemIndex(item)<0)
- {
- arrColl.addItem(item);
- }
- }
- //del
- public function delFromSelected(item:Object):void{
- if(arrColl.getItemIndex(item)>-1)
- {
- arrColl.removeItemAt(arrColl.getItemIndex(item));
- }
- }
- //isIn
- public function isInSelected(item:Object):Boolean{
- if(arrColl.getItemIndex(item)<0)
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- public function getSelected():ArrayCollection{
- return arrColl;
- }
- }
- }
package flex.components.checkdatagrid
{
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.controls.DataGrid;
public class MyDataGrid extends DataGrid
{
protected var arrColl:ArrayCollection = null; //保存被选中的信息
public function MyDataGrid()
{
super();
arrColl = new ArrayCollection();
}
//方法名不该取这个的
public function get listRendererArray():Array{
return listItems;
}
//add
public function addToSelected(item:Object):void{
if(arrColl.getItemIndex(item)<0)
{
arrColl.addItem(item);
}
}
//del
public function delFromSelected(item:Object):void{
if(arrColl.getItemIndex(item)>-1)
{
arrColl.removeItemAt(arrColl.getItemIndex(item));
}
}
//isIn
public function isInSelected(item:Object):Boolean{
if(arrColl.getItemIndex(item)<0)
{
return false;
}
else
{
return true;
}
}
public function getSelected():ArrayCollection{
return arrColl;
}
}
}
CheckHeadBoxIR.as 实现全选用的checkbox
- package flex.components.checkdatagrid
- {
- import flash.display.DisplayObject;
- import flash.events.Event;
- import flash.text.TextField;
- import mx.controls.CheckBox;
- import mx.controls.DataGrid;
- import mx.events.DataGridEvent;
- public class CheckHeadBoxIR extends CheckBox
- {
- public function CheckHeadBoxIR(){
- super();
- this.addEventListener(Event.CHANGE, cgHandler);
- }
- override public function set data(value:Object) : void{
- //super.data = value; //一定不要有这句
- this.selected = false;
- DataGrid(listData.owner).addEventListener(DataGridEvent.HEADER_RELEASE, sortEventHandler);
- }
- private function sortEventHandler(event:DataGridEvent):void{
- if(event.itemRenderer == this)
- {
- event.preventDefault();
- }
- }
- //居中显示
- override protected function updateDisplayList(w:Number, h:Number) : void{
- super.updateDisplayList(w, h);
- for(var i:Number=0; i<numChildren; i++)
- {
- var c:DisplayObject = getChildAt(i);
- if(!(c is TextField))
- {
- c.x = Math.round((w-c.width)/2);
- c.y = Math.round((h-c.height)/2);
- }
- }
- }
- protected function cgHandler(event:Event):void{
- //得到DataGrid里的listItems
- var listItems:Array = MyDataGrid(listData.owner).listRendererArray;
- if(listItems.length>0)
- {
- for(var i:Number=0; i<listItems.length; i++)
- {
- if(listItems[i].length>0)
- {
- if(listItems[i][0].selected != this.selected)
- {
- listItems[i][0].selected = this.selected;
- listItems[i][0].dispatchEvent(new Event(Event.CHANGE));
- }
- }
- }
- }
- /*var ii:Object = dataGrid.indexToItemRenderer(2).data;*/
- }
- }
- }
package flex.components.checkdatagrid
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.text.TextField;
import mx.controls.CheckBox;
import mx.controls.DataGrid;
import mx.events.DataGridEvent;
public class CheckHeadBoxIR extends CheckBox
{
public function CheckHeadBoxIR(){
super();
this.addEventListener(Event.CHANGE, cgHandler);
}
override public function set data(value:Object) : void{
//super.data = value; //一定不要有这句
this.selected = false;
DataGrid(listData.owner).addEventListener(DataGridEvent.HEADER_RELEASE, sortEventHandler);
}
private function sortEventHandler(event:DataGridEvent):void{
if(event.itemRenderer == this)
{
event.preventDefault();
}
}
//居中显示
override protected function updateDisplayList(w:Number, h:Number) : void{
super.updateDisplayList(w, h);
for(var i:Number=0; i<numChildren; i++)
{
var c:DisplayObject = getChildAt(i);
if(!(c is TextField))
{
c.x = Math.round((w-c.width)/2);
c.y = Math.round((h-c.height)/2);
}
}
}
protected function cgHandler(event:Event):void{
//得到DataGrid里的listItems
var listItems:Array = MyDataGrid(listData.owner).listRendererArray;
if(listItems.length>0)
{
for(var i:Number=0; i<listItems.length; i++)
{
if(listItems[i].length>0)
{
if(listItems[i][0].selected != this.selected)
{
listItems[i][0].selected = this.selected;
listItems[i][0].dispatchEvent(new Event(Event.CHANGE));
}
}
}
}
/*var ii:Object = dataGrid.indexToItemRenderer(2).data;*/
}
}
}
CheckBoxIR.as
- package flex.components.checkdatagrid
- {
- import flash.display.DisplayObject;
- import flash.events.Event;
- import flash.text.TextField;
- import mx.collections.ArrayCollection;
- import mx.controls.Alert;
- import mx.controls.CheckBox;
- public class CheckBoxIR extends CheckBox{
- public function CheckBoxIR(){
- super();
- this.addEventListener(Event.CHANGE, cgHandler);
- }
- override public function set data(value:Object) : void{
- super.data = value;
- if(MyDataGrid(listData.owner).isInSelected(data.id))
- {
- this.selected = true;
- }
- else
- {
- this.selected = false;
- }
- // Alert.show("int set data--"+data.@id);
- }
- //居中显示
- override protected function updateDisplayList(w:Number, h:Number) : void{
- super.updateDisplayList(w, h);
- for(var i:Number=0; i<numChildren; i++)
- {
- var c:DisplayObject = getChildAt(i);
- if(!(c is TextField))
- {
- c.x = Math.round((w-c.width)/2);
- c.y = Math.round((h-c.height)/2);
- }
- }
- }
- protected function cgHandler(event:Event):void{
- var dg:MyDataGrid = MyDataGrid(listData.owner);
- if(this.selected == true)
- {
- dg.addToSelected(data.id);
- }
- else
- {
- dg.delFromSelected(data.id);
- }
- }
- }
- }
package flex.components.checkdatagrid
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.text.TextField;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.controls.CheckBox;
public class CheckBoxIR extends CheckBox{
public function CheckBoxIR(){
super();
this.addEventListener(Event.CHANGE, cgHandler);
}
override public function set data(value:Object) : void{
super.data = value;
if(MyDataGrid(listData.owner).isInSelected(data.id))
{
this.selected = true;
}
else
{
this.selected = false;
}
// Alert.show("int set data--"+data.@id);
}
//居中显示
override protected function updateDisplayList(w:Number, h:Number) : void{
super.updateDisplayList(w, h);
for(var i:Number=0; i<numChildren; i++)
{
var c:DisplayObject = getChildAt(i);
if(!(c is TextField))
{
c.x = Math.round((w-c.width)/2);
c.y = Math.round((h-c.height)/2);
}
}
}
protected function cgHandler(event:Event):void{
var dg:MyDataGrid = MyDataGrid(listData.owner);
if(this.selected == true)
{
dg.addToSelected(data.id);
}
else
{
dg.delFromSelected(data.id);
}
}
}
}
应用
- <checkdatagrid:MyDataGrid width="100%" borderStyle="outset" height="366"
- id="orderInfo" dataProvider="{data}" >
- <checkdatagrid:columns>
- <mx:DataGridColumn headerRenderer=flex.components.checkdatagrid.CheckHeadBoxIR" itemRenderer="flex.components.checkdatagrid.CheckBoxIR" width="30"/>
- </checkdatagrid:columns>
- </checkdatagrid:MyDataGrid>
<checkdatagrid:MyDataGrid width="100%" borderStyle="outset" height="366"
id="orderInfo" dataProvider="{data}" >
<checkdatagrid:columns>
<mx:DataGridColumn headerRenderer=flex.components.checkdatagrid.CheckHeadBoxIR" itemRenderer="flex.components.checkdatagrid.CheckBoxIR" width="30"/>
</checkdatagrid:columns>
</checkdatagrid:MyDataGrid>