DataGrid使用 for Flex

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="OnLoad()">
    
<mx:Style>
        Application 
        
{
            font
-size:12px;
        }

        ToolTip
        
{
            font
-size:12px;
        }

        ErrorString
        
{
            font
-size:12px;
        }

    
</mx:Style>
    
<mx:Script>
        
<![CDATA[
            
import comm.*
            
import mx.collections.ArrayCollection;
            
import mx.events.DataGridEvent;  
            
import mx.controls.Alert;
            
import mx.managers.CursorManager;
             
            [Bindable]   
            
private var carArray : ArrayCollection = new ArrayCollection(); 
            
            
private function OnLoad():void
            
{
                var car : CarVO 
= new CarVO();   
                car.Name 
= "Ford";                   
                car.Available 
= false;   
                carArray.addItem(car);   
                   
                car 
= new CarVO();   
                car.Name 
= "Benz";   
                car.Available 
= true;   
                carArray.addItem(car);   
                   
                car 
= new CarVO();   
                car.Name 
= "BMW";   
                car.Available 
= true;   
                carArray.addItem(car);
                
                car 
= new CarVO();   
                car.Name 
= "BMW";   
                car.Available 
= true;   
                carArray.addItem(car);
                
                car 
= new CarVO();   
                car.Name 
= "BMW";   
                car.Available 
= true;   
                carArray.addItem(car);
                
                car 
= new CarVO();   
                car.Name 
= "BMW";   
                car.Available 
= true;   
                carArray.addItem(car);
                
                car 
= new CarVO();   
                car.Name 
= "BMW";   
                car.Available 
= true;   
                carArray.addItem(car);
            }

            [Bindable]
            
private var employees:XML = 
              
<object>        
                
<employee>
                    
<name>Christina Coenraets</name>
                    
<phone>555-219-2270</phone>
                    
<email>ccoenraets@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                
<employee>
                    
<name>Joanne Wall</name>
                    
<phone>555-219-2012</phone>
                    
<email>jwall@fictitious.com</email>
                    
<active>true</active>
                
</employee>
                
<employee>
                    
<name>Maurice Smith</name>
                    
<phone>555-219-2012</phone>
                    
<email>maurice@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                
<employee>
                    
<name>Mary Jones</name>
                    
<phone>555-219-2000</phone>
                    
<email>mjones@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                
<employee>
                    
<name>Maurice Smith</name>
                    
<phone>555-219-2012</phone>
                    
<email>maurice@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                
<employee>
                    
<name>Mary Jones</name>
                    
<phone>555-219-2000</phone>
                    
<email>mjones@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                      
<employee>
                    
<name>Maurice Smith</name>
                    
<phone>555-219-2012</phone>
                    
<email>maurice@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                
<employee>
                    
<name>Mary Jones</name>
                    
<phone>555-219-2000</phone>
                    
<email>mjones@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                      
<employee>
                    
<name>Maurice Smith</name>
                    
<phone>555-219-2012</phone>
                    
<email>maurice@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                
<employee>
                    
<name>Mary Jones</name>
                    
<phone>555-219-2000</phone>
                    
<email>mjones@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                 
<employee>
                    
<name>Maurice Smith</name>
                    
<phone>555-219-2012</phone>
                    
<email>maurice@fictitious.com</email>
                    
<active>false</active>
                
</employee>
                
<employee>
                    
<name>Mary Jones</name>
                    
<phone>555-219-2000</phone>
                    
<email>mjones@fictitious.com</email>
                    
<active>true</active>
                
</employee>
            
</object>
            
private function Button_Click(e:Event):void
            
{
                
if(myTxt.text == "")
                    myTxt.errorString
="This Value is not NUll";
                
else
                    myTxt.errorString 
= null;
            }

            
//用户准备好编辑项目以后调度;例如,当鼠标在项目上时,用户释放鼠标按键就会指示这种情况。
            private function OnDataGridEdit_Begining(event:DataGridEvent):void
            
{
                    
//设置第0列不允许编辑
                    if(event.columnIndex == 0)
                        event.preventDefault(); 
                    
if(event.columnIndex == 3)
                        event.preventDefault();
            }

            
            
//在DataGrid中的点CheckBox执行的事件,将修改DataGrid.provider的数据.
            public function checkBox_click(event:MouseEvent):void
            
{
                var car:CarVO 
= CarVO(carArray.getItemAt(gvw.selectedIndex));
                
if(car.Available == true)
                    car.Available 
= false;
                
else
                    car.Available 
= true;
                gvw.dataProvider 
= carArray;
                
            }

            
//执行DataGrid中的删除选中行.
            public function btnDelete_Click(event:Event):void
            
{            
                var car:CarVO 
= CarVO(carArray.getItemAt(gvw.selectedIndex));
                Alert.show(car.Name);    
            }

            
//编辑一项.
            private function gvw_OnEdit_End(e:DataGridEvent):void
            
{
                CursorManager.setBusyCursor();
                var dg:DataGrid 
= e.currentTarget as DataGrid;
                var myEditor:TextInput 
= TextInput(dg.itemEditorInstance);
                var newVal:String 
= myEditor.text;
                var oldVal:String 
= dg.editedItemRenderer.data[e.dataField].toString();
                cellInfo.text 
= "Cell edited.\n";
                cellInfo.text 
+= "Row,column:"+e.rowIndex+","+e.columnIndex+"\n";
                cellInfo.text 
+= "new value :"+newVal+"\n";
                cellInfo.text 
+= "Old value :"+oldVal;
                CursorManager.removeBusyCursor();
            }

                
            
        ]]
>
    
</mx:Script>
    
<mx:transitions>
        
<mx:Transition  fromState="*" toState="*">
            
<mx:Sequence targets="{[panel1,panel2,panel3]}">
                
<mx:Move duration="200"/>
                
<!--<mx:Rotate angleFrom="180" angleTo="360" /> -->
                
<mx:Resize duration="200" />
            
</mx:Sequence>
        
</mx:Transition>
    
</mx:transitions>    
    
<mx:states>
        
<mx:State name="s1">
            
<mx:SetProperty target="{panel1}" name="x" value="5"/>
            
<mx:SetProperty target="{panel1}" name="y" value="60"/>    
            
<mx:SetProperty target="{panel1}" name="height" value="{hs.value}"/>
            
<mx:SetProperty target="{panel1}" name="width" value="{vs.value}"/>            
            
<mx:SetProperty target="{panel2}" name="x" value="135"/>
            
<mx:SetProperty target="{panel2}" name="y" value="10"/>    
            
<mx:SetProperty target="{panel2}" name="height" value="30"/>
            
<mx:SetProperty target="{panel2}" name="width" value="125"/>            
            
<mx:SetProperty target="{panel3}" name="x" value="270"/>
            
<mx:SetProperty target="{panel3}" name="y" value="10"/>    
            
<mx:SetProperty target="{panel3}" name="height" value="30"/>
            
<mx:SetProperty target="{panel3}" name="width" value="125"/>                                
        
</mx:State>        
        
<mx:State name="s2">
            
<mx:SetProperty target="{panel1}" name="x" value="5"/>
            
<mx:SetProperty target="{panel1}" name="y" value="10"/>    
            
<mx:SetProperty target="{panel1}" name="height" value="30"/>
            
<mx:SetProperty target="{panel1}" name="width" value="125"/>            
            
<mx:SetProperty target="{panel2}" name="x" value="5"/>
            
<mx:SetProperty target="{panel2}" name="y" value="60"/>    
            
<mx:SetProperty target="{panel2}" name="height" value="{hs.value}"/>
            
<mx:SetProperty target="{panel2}" name="width" value="{vs.value}"/>            
            
<mx:SetProperty target="{panel3}" name="x" value="270"/>
            
<mx:SetProperty target="{panel3}" name="y" value="10"/>    
            
<mx:SetProperty target="{panel3}" name="height" value="30"/>
            
<mx:SetProperty target="{panel3}" name="width" value="125"/>                            
        
</mx:State>
        
<mx:State name="s3">
            
<mx:SetProperty target="{panel1}" name="x" value="5"/>
            
<mx:SetProperty target="{panel1}" name="y" value="10"/>    
            
<mx:SetProperty target="{panel1}" name="height" value="30"/>
            
<mx:SetProperty target="{panel1}" name="width" value="125"/>                            
            
<mx:SetProperty target="{panel2}" name="x" value="135"/>
            
<mx:SetProperty target="{panel2}" name="y" value="10"/>    
            
<mx:SetProperty target="{panel2}" name="height" value="30"/>
            
<mx:SetProperty target="{panel2}" name="width" value="125"/>            
            
<mx:SetProperty target="{panel3}" name="x" value="5"/>
            
<mx:SetProperty target="{panel3}" name="y" value="60"/>    
            
<mx:SetProperty target="{panel3}" name="height" value="{hs.value}"/>
            
<mx:SetProperty target="{panel3}" name="width" value="{vs.value}"/>            
        
</mx:State>
    
</mx:states>

    
<mx:Panel x="5" y="60" width="{vs.value}" height="{hs.value}" layout="absolute" title="Panel 1" id="panel1" click="this.currentState='s1'">
<!--
DataGridEvent.HEADER_RELEASE:用户在列标题上按下并释放鼠标以后调度。 
DataGridEvent.ITEM_EDIT_BEGIN:准备编辑项目时调度。 
DataGridEvent.ITEM_EDIT_BEGINNING:用户准备好编辑项目以后调度;例如,当鼠标在项目上时,用户释放鼠标按键就会指示这种情况。 
DataGridEvent.ITEM_EDIT_END:编辑会话结束时调度。 
DataGridEvent.ITEM_FOCUS_IN:在项目获得焦点以后调度。 
DataGridEvent.ITEM_FOCUS_OUT:在项目失去焦点以后调度。
 
-->
        
<mx:DataGrid left="10" right="10" top="10" bottom="85" dataProvider="{carArray}" editable="true" 
            itemEditBegin
="OnDataGridEdit_Begining(event)" id="gvw" itemEditEnd="gvw_OnEdit_End(event)">
            
<mx:columns>
                
<mx:DataGridColumn headerText="Column 1" dataField="Available" >
                    
<mx:itemRenderer>
                        
<mx:Component>
                        
<!-- 在Mx:Component中要使用outerDocument发部事件.如 click="outerDocument.checkBox_click(event)"-->
                            
<mx:CheckBox label="{data.Name}" selected="{data.Available}" click="outerDocument.checkBox_click(event)"/>
                        
</mx:Component>
                    
</mx:itemRenderer>
                
</mx:DataGridColumn>
                
<mx:DataGridColumn headerText="名称" dataField="Name"/>
                
<mx:DataGridColumn headerText="电话" dataField="Available"/>
                
<mx:DataGridColumn headerText="操作" dataField="Name">
                    
<mx:itemRenderer>
                        
<mx:Component>
                            
<mx:LinkButton label="删除" click="outerDocument.btnDelete_Click(event)">
                            
</mx:LinkButton>
                        
</mx:Component>
                    
</mx:itemRenderer>    
                
</mx:DataGridColumn>
            
</mx:columns>
        
</mx:DataGrid>
        
<mx:TextArea left="10" right="10" bottom="10" height="70" id="cellInfo"/>
    
</mx:Panel>
    
<mx:Panel x="135" y="10" width="317" height="162" layout="absolute" title="Panel 2" id="panel2" click="this.currentState='s2'">        
            
<mx:TextInput id="myTxt" x="10" y="31" />
            
<mx:Button label="Button" x="178" y="32" click="Button_Click(event)" toolTip="提交"/>        
    
</mx:Panel>
    
<mx:Panel x="270" y="10" width="125" height="30" layout="absolute" title="Panel 3" id="panel3" click="this.currentState='s3'">
    
</mx:Panel>
    
<mx:Button label="Reset" click="this.currentState=''" bottom="10" horizontalCenter="0"/>
    
<mx:VSlider value="0" maximum="600" minimum="300" tickInterval="10" id="hs" right="5" top="10" bottom="55"/>
    
<mx:HSlider value="0" maximum="1024" minimum="390" tickValues="10" id="vs" bottom="31" right="10" left="10"/>
</mx:Application>

注意:
    在DataGrid中的CheckBox列用到了data.Available这种邦定方式.如果把DataGrid的邦定换成是直接的XML对象邦定那么在Data.Available邦定时会出现 warning: unable to bind to property 'Available' on class 'XML' (class is not an IEventDispatcher) 原因是在XML对象内属性Available没有声名[Bindable] 的原因,这样会出现不可预料的结果.如果把他定义用Class 对象在用时使用[Bindable] 关键字问题解决.
原文地址:https://www.cnblogs.com/wubiyu/p/1244069.html