在DataGrid中实现CheckBox
最近在flex项目中,实现了该功能,share下:
xxxx.mxml
TCheckBoxHeaderRender.as:public class TCheckBoxItemRender extends TCheckBox{ private var currentData:Object; private var model:TModelLocator = TModelLocator.getInstance(); public function TCheckBoxItemRender(){ super(); this.showMiddle = true; this.addEventListener(MouseEvent.CLICK,onClickCheckBox); this.addEventListener(Event.CANCEL,onClickCheckBox); } override public function set data(value:Object):void{ this.selected = value.isSelected; this.currentData = value; } private function onClickCheckBox(e:Event):void{ var dg:DataGrid = DataGrid(listData.owner); var column:TCheckBoxColumn = dg.columns[listData.columnIndex]; this.currentData.isSelected = this.selected; if(this.selected){ column.selectItems.push(this.currentData); }else{ for(var i:int = 0; i<column.selectItems.length; i++){ if(column.selectItems[i] == this.currentData){ column.selectItems.splice(i,1) } } } if(column.isDisable) {column.canRemove = false;column.canEdit =false;}else{if(column.selectItems.length==1) { column.canRemove = true; column.canEdit = true; }else if(column.selectItems.length>1) { column.canEdit = false; column.canRemove = true; }else { column.canEdit = false; column.canRemove = false; }}changeCheckBoxHeader(); } private function changeCheckBoxHeader():void{ var dg:DataGrid = DataGrid(listData.owner); var dgDataArr:ArrayCollection = dg.dataProvider as ArrayCollection; var totalColumnSize:int =dgDataArr.length; var allSelected=true; var selectColumnArr:Array = dg.columns[0].selectItems; var selectColumnSize:int = selectColumnArr.length; if(selectColumnSize!=totalColumnSize){ allSelected = false; } var headerColumn :TCheckBoxColumn = dg.columns[0]; if(allSelected){ headerColumn.cloumnSelected=true; }else{ headerColumn.cloumnSelected=false; } dgDataArr.refresh(); } }