转自:http://blog.csdn.net/vipliyaohua/article/details/6610526
在DataGrid中实现列中加入CheckBox这种用法很常见,项目中也经常会用到,在网上搜了下基本就是实现itemRender.但是 感觉网上提供的实现上好些地方都是多余的 经过自己的改造感觉还行 附上代码,同时希望大家举一反三 能实现添加其他组件到DataGrid列中
贴出自己改造过的:
CheckBoxHeaderRenderer.as
1 package 2 { 3 4 import flash.events.Event; 5 import flash.events.MouseEvent; 6 7 import mx.collections.ArrayCollection; 8 import mx.controls.Alert; 9 import mx.controls.CheckBox; 10 import mx.controls.DataGrid; 11 import mx.events.DataGridEvent; 12 13 public class CheckBoxHeaderRenderer extends CheckBox 14 { 15 private var sele:String; 16 public function CheckBoxHeaderRenderer() 17 { 18 super(); 19 this.addEventListener(Event.CHANGE, clickHandlers); 20 } 21 22 override public function set data(value:Object):void 23 { 24 DataGrid(listData.owner).addEventListener 25 (DataGridEvent.HEADER_RELEASE,sortEventHandler); 26 this.selected=this.sele=="true"?true:false; 27 } 28 29 private function sortEventHandler(event:DataGridEvent):void 30 { 31 if (event.itemRenderer == this) 32 event.preventDefault(); 33 } 34 35 protected function clickHandlers(event:Event):void 36 { 37 sele=(event.currentTarget.selected).toString(); 38 var a:ArrayCollection=DataGrid(listData.owner).dataProvider as ArrayCollection; 39 for(var i:int=0;i<a.length;i++){ 40 41 (DataGrid(listData.owner).dataProvider as ArrayCollection) 42 .getItemAt(i).selected=(event.currentTarget.selected).toString(); 43 } 44 (DataGrid(listData.owner).dataProvider as ArrayCollection).refresh(); 45 } 46 47 } 48 }
CheckBoxItemDataRenderer.as
1 package 2 { 3 import flash.events.Event; 4 import mx.collections.ArrayCollection; 5 import mx.controls.CheckBox; 6 import mx.controls.DataGrid; 7 8 public class CheckBoxItemDataRenderer extends CheckBox 9 { 10 private var currentData:Object; //保存当前一行值的对象 11 public function CheckBoxItemDataRenderer() 12 { 13 super(); 14 this.addEventListener(Event.CHANGE, changeHandler); 15 } 16 override public function set data(value:Object):void 17 { 18 this.currentData= value; 19 this.selected = value.selected == "true"?true:false; 20 } 21 22 protected function changeHandler(event : Event) : void 23 { 24 currentData.selected = this.selected.toString(); 25 } 26 /*override public function get data():Object{ 27 return currentData; 28 }*/ 29 } 30 }
DataGrid_Checkbox.mxml
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:dataGrid="*" minWidth="955" minHeight="600" creationComplete="getaa()"> <fx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.controls.Alert; [Bindable] private var data_myDataGrid:ArrayCollection=new ArrayCollection(); private function headerClickHandler(event : Event) : void { /* for each(var obj: Object in data_myDataGrid) { obj.selected = String(event.currentTarget.selected); } data_myDataGrid.refresh(); */ } private function getaa():void{ var obj:Object=new Object(); obj.labe="1"; obj.data="a"; obj.selected="false"; var obj2:Object=new Object(); obj2.labe="2"; obj2.data="b"; obj2.selected="false"; var obj3:Object=new Object(); obj3.labe="3"; obj3.data="c"; obj3.selected="false"; var obj4:Object=new Object(); obj4.labe="4"; obj4.data="a"; obj4.selected="false"; var obj5:Object=new Object(); obj5.labe="5"; obj5.data="b"; obj5.selected="false"; var obj6:Object=new Object(); obj6.labe="6"; obj6.data="c"; obj6.selected="false"; var obj7:Object=new Object(); obj7.labe="7"; obj7.data="a"; obj7.selected="false"; var obj8:Object=new Object(); obj8.labe="8"; obj8.data="b"; obj8.selected="false"; var obj9:Object=new Object(); obj9.labe="9"; obj9.data="c"; obj9.selected="false"; data_myDataGrid.addItem(obj); data_myDataGrid.addItem(obj3); data_myDataGrid.addItem(obj2); data_myDataGrid.addItem(obj4); data_myDataGrid.addItem(obj5); data_myDataGrid.addItem(obj6); data_myDataGrid.addItem(obj7); data_myDataGrid.addItem(obj8); data_myDataGrid.addItem(obj9); } protected function button1_clickHandler(event:MouseEvent):void { for(var i:int=0;i<data_myDataGrid.length;i++){ if(data_myDataGrid.getItemAt(i).selected=='true'){ Alert.show(data_myDataGrid.getItemAt(i).labe); } } } ]]> </fx:Script> <mx:DataGrid dataProvider="{data_myDataGrid}" x="10" y="10"> <mx:columns> <mx:DataGridColumn dataField="labe" headerText="Label" /> <mx:DataGridColumn dataField="data" headerText="Data" /> <mx:DataGridColumn dataField="selected" headerText="Select" itemRenderer="CheckBoxItemDataRenderer" headerRenderer="CheckBoxHeaderRenderer" /> </mx:columns> </mx:DataGrid> <mx:Button click="button1_clickHandler(event)"/> </s:Application>

浙公网安备 33010602011771号