2011-12-16 40 views
0

在我的flex應用程序中,使用一個包含三個coloumns的數據網格 第一列用於複選框,因爲itemRenderer和 其他兩列是可編輯的。數據網格中的Flex複選框itemrenderer

我的要求是

現在

當我取從DB一些數據的DATAS將在數據網格填充,

1.after填充DATAS,第一欄應在所有行 被禁用2.如果我單擊第二個或第三列在一排進行編輯。在相應行第一列中的複選框應該啓用和複選框應準備檢查,並取消..

我怎麼能做到這一點 這裏是我的代碼

<mx:DataGrid x="46" y="135" dataProvider="{DetailsProvider}" width="836" height="349"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Select" dataField="isSelect" itemRenderer="com.components.checkbox"/> 
     <mx:DataGridColumn headerText="First Name" dataField="fname"/> 
     <mx:DataGridColumn headerText="Second Name" dataField="sname"/></mx:columns></mx:DataGrid> 

我希望這個細節就足以明白我的問題 任何想法,這..在此先感謝..

回答

1

我提供你使用的ItemRenderer和itemEditor的都在我所創建的示例代碼單個DataGrid,您只需創建一個名爲d ComNS和ComCB的新mxml組件即可。只要創建我給你的示例代碼。

守則主MXML器件的應用

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" horizontalAlign="center" 
verticalAlign="middle" height="100%" width="100%"> 

<mx:Script> 
    <![CDATA[ 
     public var arr:Array = new Array({isSelected:true,label:'ABC',score:'78',name:'ABC'}, 
             {isSelected:true,label:'DEF',score:'50',name:'DEF'}, 
             {isSelected:false,label:'GHI',score:'70',name:'GHI'}, 
             {isSelected:false,label:'JKL',score:'80',name:'JKL'}, 
             {isSelected:true,label:'TRE',score:'50',name:'MNO'}); 

     public function dgCLG_dataChange():void 
     { 

     } 

     public function dgCLG_change():void 
     { 

     } 

     public function btnSubmit_click():void 
     { 
      dgCopy.dataProvider = dgCLG.dataProvider; 
     } 

    ]]> 
</mx:Script> 

<mx:VBox height="100%" width="100%" horizontalAlign="center" verticalAlign="middle"> 
    <mx:DataGrid id="dgCLG" dataProvider="{arr}" editable="true" dataChange="{dgCLG_dataChange();}" change="{dgCLG_change();}"> 
     <mx:columns> 
      <mx:DataGridColumn headerText="" dataField="isSelected"> 
       <mx:itemRenderer> 
        <mx:Component> 
         <mx:Box horizontalAlign="center" verticalAlign="middle" height="100%" width="100%"> 
          <mx:Script> 
           <![CDATA[ 
            override public function set data(value:Object):void 
            { 
             if(value != null) 
             { 
              super.data = value; 
              var temp:Object = value as Object; 
              chb.selected = temp.isSelected; 
             } 
            } 
           ]]> 
          </mx:Script> 
          <mx:CheckBox id="chb"/> 
         </mx:Box> 
        </mx:Component>      
       </mx:itemRenderer> 
      </mx:DataGridColumn> 
      <mx:DataGridColumn headerText="Label" dataField="label" editable="false"> 

      </mx:DataGridColumn> 
      <mx:DataGridColumn headerText="Marks" dataField="score" editable="true" itemEditor="ComNS" editorDataField="value"> 

      </mx:DataGridColumn> 
      <mx:DataGridColumn dataField="name" headerText="Person" itemEditor="ComCB" editorDataField="value" editable="true"> 

      </mx:DataGridColumn> 
     </mx:columns> 
    </mx:DataGrid> 

    <mx:Button id="btnSubmit" label="Click" click="{btnSubmit_click();}" /> 

    <mx:DataGrid id="dgCopy" editable="false"> 
     <mx:columns> 
      <mx:DataGridColumn headerText="CopyLabel" dataField="label" /> 
      <mx:DataGridColumn headerText="CopyMarks" dataField="score" /> 
      <mx:DataGridColumn headerText="CopyPerson" dataField="name" /> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:VBox> 

</mx:Application> 

代碼ComNS.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:NumericStepper xmlns:mx="http://www.adobe.com/2006/mxml" minimum="0" maximum="100"> 

</mx:NumericStepper> 

代碼ComCB.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" dataProvider="{arr}" selectedIndex="1" creationComplete="{c_complete();}" > 
<mx:Script> 
    <![CDATA[ 
     public var arr:Array = new Array({label:'ABC'},{label:'DEF'},{label:'GHI'},{label:'JKL'},{label:'MNO'}) 

     public function c_complete():void 
     { 
      for(var i:int = 0; i < arr.length; i++) 
      { 
       if(arr[i].label == parentDocument.dgCLG.selectedItem.name) 
       { 
        this.selectedItem = arr[i]; 
       } 
      } 
     } 
    ]]> 
</mx:Script> 
</mx:ComboBox> 

如果有任何疑問只是我的回答評論.. ..

+3

哇, 薩加爾Rawal,偉大的工作。 – 2011-12-17 06:40:46

0

如果實現IDropInListItemRenderer,則渲染器將傳遞一個BaseListData對象,其中包含對DataGrid的引用。通過對DataGrid的引用,可以將其selectedItem與該渲染器的數據對象進行比較,以啓用或禁用該複選框。

請注意,複選框應該已經實現了這個接口,所以理論上你應該能夠使用它進行一些調整。但是,它沒有被Adobe正確實施。在聯機幫助中查看此頁面的註釋,瞭解如何修復http://livedocs.adobe.com/flex/3/html/help.html?content=celleditor_4.html

相關問題