您的位置:首页 > 其它

flex datagrid 嵌checkbox实现全选与数据存储(非绑定数据源)

2011-11-01 13:03 519 查看
http://fogiguiuu.iteye.com/blog/591106

重写了DataGrid,主要是为了得到DataGrid的listItems属性,listItems保存了当前现显示的每一行的信息,还用了个ArrayCollection保存被选中了行的信息。

MyDataGrid.as

Java代码







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

Java代码







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

Java代码







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);
}
}

}
}


应用

Java代码







<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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: