AdvancedDataGrid实现CheckBox全选功能

本文转载,具体地址找不到了.......见谅啊作者。

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类中使用绑定而出现点击全选页面没有更改状态的错误        
                }  
        }
}


 

附件下载地址: http://download.csdn.net/source/3456289
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值