穿梭于丛林之间  
一个热爱设计的孩纸,有着程序猿的情节,干着穿山越岭工作。

转自: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>

 

posted on 2013-05-25 20:39  perrychum  阅读(189)  评论(0)    收藏  举报