flex 给DataGrid添加CheckBox全选列

来源:互联网 发布:网络链路冗余技术 编辑:程序博客网 时间:2024/05/21 19:29

其实这个只是扩展了一下下ItemRenderer,headerRenderer ,然后继承DataGridColumn写一个自己的GridColumn。 
扩展的类有三个,分别是: 
1、CheckBoxColumn:这个类继承了DataGridColumn 
2、CheckBoxHeader:继承了CheckBox 
3、CheckBoxRenderer:继承了CheckBox 
如图: 
 

代码如下: 
CheckBoxColumn类 

Java代码 复制代码 收藏代码

  1. package org.extendx.grid  

  2. {  

  3.    import mx.controls.dataGridClasses.DataGridColumn;  

  4.  

  5.    public class CheckBoxColumn extends DataGridColumn  

  6.    {  

  7.        public var header:CheckBoxHeader=null;  

  8.        public var columnRenderers:Array=[];  

  9.          

  10.        public var checkField:String="selected";//默认选择框的字段  

  11.          

  12.        public function CheckBoxColumn(columnName:String=null)  

  13.        {  

  14.            super(columnName);  

  15.              

  16.        }  

  17.        public function setColumnRenderers(o:CheckBoxRenderer){  

  18.            this.columnRenderers.push(o);  

  19.        }  

  20.          

  21.    }  

  22. }  


CheckBoxHeader类 

Java代码 复制代码 收藏代码

  1. package org.extendx.grid  

  2. {  

  3.    import flash.events.MouseEvent;  

  4.      

  5.    import mx.collections.ArrayCollection;  

  6.    import mx.controls.Alert;  

  7.    import mx.controls.CheckBox;  

  8.    import mx.controls.DataGrid;  

  9.    import mx.controls.dataGridClasses.DataGridColumn;  

  10.    import mx.events.DynamicEvent;  

  11.      

  12.    public class CheckBoxHeader extends CheckBox  

  13.    {  

  14.        private var _data:DataGridColumn;  

  15.        private var isRegisted:Boolean=false;  

  16.        public var checkField:String="selected";//默认选择框的字段  

  17.          

  18.        public function CheckBoxHeader()  

  19.        {  

  20.            super();  

  21.            this.setStyle("paddingLeft",5);  

  22.            this.addEventListener(MouseEvent.CLICK,this.onHeaderClick);  

  23.  

  24.              

  25.        }  

  26.        override public function set data(value:Object):void {  

  27.            _data=value as DataGridColumn;  

  28.            this.label=value.headerText  

  29.            if(!this.isRegisted){  

  30.                var cc:CheckBoxColumn=this.data as CheckBoxColumn;  

  31.                cc.header=this;  

  32.                this.checkField=cc.checkField;  

  33.                this.isRegisted=true;  

  34.            }  

  35.        }          

  36.        override public function get data():Object  

  37.        {  

  38.            return _data;  

  39.        }  

  40.        override public function  set selected(value:Boolean):void{  

  41.            super.selected=value;      

  42.            if(listData){  

  43.                var dg:DataGrid = DataGrid(listData.owner);  

  44.                var de:DynamicEvent=new DynamicEvent("selectedAllChange");   

  45.                de.selected=this.selected  

  46.                dg.dispatchEvent(de);  

  47.            }  

  48.        }          

  49.        private function onHeaderClick(e:MouseEvent){  

  50.            var dg:DataGrid = DataGrid(listData.owner);  

  51.            var s:ArrayCollection=ArrayCollection(dg.dataProvider);  

  52.            var array=[];  

  53.            for(var i=0;i<s.length;i++){  

  54.                s[i][this.checkField]=this.selected;                  

  55.            }              

  56.            dg.invalidateList();              

  57.        }  

  58.    }  

  59. }  


CheckBoxRenderer 类 

Java代码 复制代码 收藏代码

  1. package org.extendx.grid  

  2. {  

  3.    import flash.events.MouseEvent;  

  4.      

  5.    import mx.collections.ArrayCollection;  

  6.    import mx.controls.Alert;  

  7.    import mx.controls.CheckBox;  

  8.    import mx.controls.DataGrid;  

  9.    import mx.controls.Label;  

  10.    import mx.controls.TextInput;  

  11.      

  12.    public class CheckBoxRenderer extends CheckBox  

  13.    {  

  14.        private var isRegisted:Boolean=false;  

  15.        public var checkField:String="selected";//默认选择框的字段  

  16.          

  17.        private var ml:Label=null  

  18.        public function CheckBoxRenderer()  

  19.        {  

  20.            super();  

  21.            this.setStyle("paddingLeft",5);  

  22.            this.setStyle("fontStyle","italic");//fontStyle: normal | italic | oblique;]   

  23.            this.setStyle("fontSize",13);//fontStyle: normal | italic | oblique;]  

  24.            this.addEventListener(MouseEvent.CLICK,this.onReClick);  

  25.  

  26.        }  

  27.        override public function set data(value:Object):void {  

  28.            super.data=value;  

  29.            this.label=value.displayName;//这个地方写死了显示字段,需要改的朋友可以改改试试  

  30.            if(!isRegisted){  

  31.                isRegisted=true  

  32.                var dg:DataGrid = DataGrid(listData.owner)  

  33.                var cc:CheckBoxColumn=dg.columns[listData.columnIndex];  

  34.                this.checkField=cc.checkField;  

  35.            }  

  36.            this.selected=value[this.checkField];  

  37.        }  

  38.        override public function  set selected(value:Boolean):void{  

  39.            super.selected=value;                  

  40.        }  

  41.  

  42.        private function onReClick(e){            

  43.            this.data[this.checkField]=this.selected;  

  44.            var dg:DataGrid = DataGrid(listData.owner)  

  45.            var cc:CheckBoxColumn=dg.columns[listData.columnIndex];  

  46.            cc.header.selected=isAll();  

  47.        }  

  48.        private function isAll(){  

  49.            var dg:DataGrid = DataGrid(listData.owner)  

  50.            var s:ArrayCollection=ArrayCollection(dg.dataProvider);  

  51.              

  52.            for(var i=0;i<s.length;i++){  

  53.                if(!s[i][this.checkField]){  

  54.                    return false  

  55.                }                  

  56.            }          

  57.            return true  

  58.        }  

  59.    }  

  60. }  


调用代码: 

Java代码 复制代码 收藏代码

  1.            this.dg=new DataGrid();  

  2.          

  3.            var dgcc:CheckBoxColumn=new CheckBoxColumn();  

  4.            dgcc.headerText="";  

  5.            dgcc.width=25;  

  6.            dgcc.dataField="displayName"  

  7.            dgcc.checkField="selected"//设置选择框对应字段  

  8.            dgcc.itemRenderer=new ClassFactory(CheckBoxRenderer);//此处还可以放到CheckBoxColumn内部  

  9.            dgcc.headerRenderer=new ClassFactory(CheckBoxHeader);//此处还可以放到CheckBoxColumn内部  

  10.  

  11.        var dgcc2:DataGridColumn=new DataGridColumn();  

  12.            dgcc2.headerText="";  

  13.            //dgcc2.width=40;  

  14.            dgcc2.dataField="displayName";  

  15.  

  16. this.dg.columns=[dgcc,dgcc2]  

0 0