2009-07-15 4 views
0

Ich habe Iteamreander in Datagrid verwendet. Wenn ich Kontrollkästchen im Raster automatisch auswählen, wählen Sie eine andere Checkbox warum? plz erklären Meine Xml-Daten sind mehr als 50 Datensätze.Problem mit dem DataGrid von itemRenderer Checkbox - kann immer noch nicht das Problem lösen

<mx:DataGrid change="calculate()" id="calamount" x="0" y="3" width="327" 
      height="337" variableRowHeight="true" 
      dataProvider="{xml_coupon.lastResult.Teamcoupon.match_details}" > 
    <mx:columns> 
    <mx:DataGridColumn headerText="Away" dataField="away_team" width="100"/> 
    <mx:DataGridColumn headerText="1" rendererIsEditor="true" 
         editorDataField="selected"> 
     <mx:itemRenderer> 
     <mx:Component> 
      <mx:HBox verticalAlign="middle" paddingLeft="2"> 
      <mx:CheckBox id="checkbox1" selected="{outerDocument.checkedAll}" 
     click="{data.check1=checkbox1.selected;outerDocument.calcValues();}"/> 
      </mx:HBox> 
     </mx:Component> 
     </mx:itemRenderer> 

Antwort

4

Ist dies geschehen, wenn Sie blättern Sie diesen Code als ItemRender verwenden können, und es wird Ihr Problem zu beheben:

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" 
    implements="mx.controls.listClasses.IDropInListItemRenderer"> 

<mx:Script> 

    import mx.events.CollectionEvent; 
    import mx.collections.ArrayCollection; 
    import mx.controls.dataGridClasses.DataGridListData; 
    import mx.controls.DataGrid; 
    import mx.controls.listClasses.BaseListData; 

    private var _listData:BaseListData; 
    private var _dataGrid:DataGrid; 

    [Bindable("dataChange")] 
    public function get listData():BaseListData 
    { 
     return _listData; 
    } 

    public function set listData(value:BaseListData):void { 
     _listData = value; 
     _dataGrid = value.owner as DataGrid; 
    } 

    override public function set data(value:Object):void { 
     super.data = value; 
     cb.selected = value["isSelected"]; 
    } 

    private function onChange():void { 
     data["isSelected"] = cb.selected; 
     var dp:ArrayCollection = _dataGrid.dataProvider as ArrayCollection; 
     dp.dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE)); 
    } 

</mx:Script> 

<mx:CheckBox id="cb" horizontalCenter="0" change="onChange()" /> 
</mx:Canvas> 
+0

Darf ich wissen, was Grund Checkbox automatisch –

+0

Aus Performance-Gründen wählen wurde, die DataGrid wird die Checkboxen zwischenspeichern und für verschiedene Zeilen wiederverwenden. Wenn Sie 50 Zeilen haben, werden keine 50 Kontrollkästchen erstellt. Es werden so viele Kontrollkästchen angezeigt, wie Sie sehen können, plus ein paar mehr für das Auffüllen, und dann beim Scrollen wiederverwenden. Aus diesem Grund müssen Sie ihren Status explizit verwalten. –

+0

Danke für Kommentare .. Wie kann ich es lösen und den Staat verwalten? Kannst du es mir klar sagen? –