本文转载,具体地址找不到了.......见谅啊作者。
dgd是AdvancedDataGrid的ID,现在的AdvancedDataGrid是使用的重写的AdvancedDataGrid
重写AdvancedDataGrid代码,很简单就加了个属性
package dg
{
import mx.controls.AdvancedDataGrid;
import myadg.CheckboxColumn;
public class AdvancedDataGrid extends mx.controls.AdvancedDataGrid
{
/** 设置grid是否有check框 */
private var _hasCheck:Boolean;
public function AdvancedDataGrid()
{
super();
}
public function get hasCheck():Boolean
{
return _hasCheck;
}
public function set hasCheck(value:Boolean):void
{
_hasCheck = value;
}
/** 取得选中的值 */
public function getSelectedItem():Array
{
if(this.hasCheck){
return (this.columns[0] as CheckboxColumn).selectItems;
}
return null;
}
}
}
在AdvancedDataGrid初始化的时候加上
private var columns:Array=new Array();
protected function dgd_initializeHandler(event:FlexEvent):void
{
if (dgd.hasCheck)
{
var checkColumn:CheckboxColumn=new CheckboxColumn();
checkColumn.itemRenderer=new ClassFactory(CheckBoxItemRenderer);
checkColumn.headerRenderer=new ClassFactory(CheckBoxHeaderRenderer);
checkColumn.dataField="dgSelected";
checkColumn.width=25;
columns.push(checkColumn);
}
}
初始化完成加上
protected function dgd_creationCompleteHandler(event:FlexEvent):void
{
if (dgd.columns.length > 0)
{
for (var j:int=0; j < dgd.columns.length; j++)
{
if (dgd.columns[j].dataField != null)
{
columns.push(dgd.columns[j]);
}
}
}
dgd.columns=columns;
}
最后在点击按钮的时候,取值:
protected function button1_clickHandler(event:MouseEvent):void
{
var array:Array = dgd.getSelectedItem();
var str:String = "";
for(var i:int=0;i<array.length;i++)
{
str += array[i].name+"===";
}
Alert.show(str);
}
这样就实现AdvancedDataGrid的全选和全消了。而且取值还特别简单,方便。
下面分别介绍一下上面出现的 CheckboxColumn、CheckBoxItemRenderer、CheckBoxHeaderRenderer
AdvancedDataGrid实现checkBox全选功能-辅助文件
CheckboxColumn
package myadg
{
import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
public class CheckboxColumn extends AdvancedDataGridColumn
{
public var cloumnSelected:Boolean=false;//保存该列是否全选的属性(用户先点击全选后在手动的取消几行数据的选中状态时,这里的状态不会改变)
public var selectItems:Array = new Array();//用户保存用户选中的数据
public function CheckboxColumn(columnName:String=null)
{
super(columnName);
}
}
}
CheckBoxItemRenderer
package myadg
{
import flash.events.Event;
import mx.controls.AdvancedDataGrid;
import mx.controls.listClasses.BaseListData;
import mx.controls.listClasses.IDropInListItemRenderer;
import mx.controls.listClasses.IListItemRenderer;
public class CheckBoxItemRenderer extends CenterCheckBox implements IListItemRenderer
{
private var currentData:Object; //保存当前一行值的对象
private var _data:Object;
public function CheckBoxItemRenderer(){
super();
this.addEventListener(Event.CHANGE,onClickCheckBox);
this.toolTip = "选择";
}
public function set data(value:Object):void{
this.selected = value.dgSelected;
this.currentData = value; //保存整行的引用
}
//点击check box时,根据状况向selectedItems array中添加当前行的引用,或者从array中移除
private function onClickCheckBox(e:Event):void{
var dg:AdvancedDataGrid = AdvancedDataGrid(this.owner);//获取DataGrid对象
var column:CheckboxColumn = dg.columns[0];//获取整列的显示对象
var selectItems:Array = column.selectItems;
this.currentData.dgSelected = this.selected;//根据是否选中的状态,更改数据源中选中的标记
if(this.selected){
selectItems.push(this.currentData);
}else{
for(var i:int = 0; i<selectItems.length; i++){
if(selectItems[i] == this.currentData){
selectItems.splice(i,1)
}
}
}
}
public function get data():Object
{
return _data;
}
}
}
CheckBoxHeaderRenderer
package myadg
{
import flash.events.Event;
import mx.collections.ArrayCollection;
import mx.controls.AdvancedDataGrid;
import mx.controls.listClasses.BaseListData;
import mx.controls.listClasses.IDropInListItemRenderer;
import mx.controls.listClasses.IListItemRenderer;
public class CheckBoxHeaderRenderer extends CenterCheckBox implements IListItemRenderer
{
private var _data:CheckboxColumn;//定义CheckBox列对象
public function CheckBoxHeaderRenderer(){
super();
this.addEventListener(Event.CHANGE,onChange);//CheckBox状态变化时触发此事件
this.toolTip = "全选";
}
public function get data():Object{
return _data;//返回的是CheckBox列的对象
}
public function set data(value:Object):void{
_data = value as CheckboxColumn;
//trace(_data.cloumnSelected);
selected = _data.cloumnSelected;
}
private function onChange(event:Event):void{
var dg:AdvancedDataGrid = AdvancedDataGrid(this.owner);//获取DataGrid对象
var column:CheckboxColumn = dg.columns[0];//获取整列的显示对象
var dgDataArr:ArrayCollection = dg.dataProvider as ArrayCollection;
column.cloumnSelected = this.selected;//更改列的全选状态
column.selectItems = new Array();//重新初始化用于保存选中列的对象
if(this.selected){//如果为全部选中的化就将数据源赋值给column.selectItems,不是就不管他,上一步已经初始化为空
column.selectItems = (dg.dataProvider as ArrayCollection).toArray();
}
if(dgDataArr.length>0){
if(dgDataArr[0]!=""){
for(var i:int = 0; i < dgDataArr.length ; i++){
Object(dgDataArr[i]).dgSelected = this.selected;//更改没一行的选中状态
}
}
}
dgDataArr.refresh();//刷新数据源,达到强制更新页面显示效果的功能,防止在使用时没有在VO类中使用绑定而出现点击全选页面没有更改状态的错误
}
}
}