2010-05-06 4 views
0

J'utilise un composant personnalisé CheckBoxList DataGrid (http://blogs.adobe.com/aharui/2008/02/checkbox_selection_in_datagrid.html) et comme dataProvider j'ai un ArrayCollection avec des articles tels celui-ci:FLEX: Datagrid, comment sélectionner un élément donné mon attribut de données valeurs

name="item name" selected="true" 

I souhaite que la liste CheckBox soit mise à jour lorsque l'attribut sélectionné est défini sur false ou true dans le modèle de données.

grâce

+0

Qu'est-ce que la liste CheckBox et où est-elle en relation avec DataGrid? – quoo

+0

désolé j'ai mis à jour ma question – aneuryzm

Répondre

0

De loin la meilleure façon est de refresh le ArrayCollection après avoir mis à jour certains des objets sein. Il y a un exemple de le faire à la fin.

Je ne crois pas que vous êtes en mesure de lier les données dans ArrayCollection. Je pense que ce que vous devez faire est d'étendre Object (ou peut-être FlashProxy) pour créer une classe personnalisée qui, lorsque certaines de ses propriétés ont changé, indique à l'Application de mettre à jour la liste de données donnée de la même manière que nous l'avons fait manuellement dans l'exemple.

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         width="426" height="243" 
         showStatusBar="false"> 

    <fx:Script> 
     <![CDATA[ 
      import mx.collections.ICollectionView; 
      import mx.controls.Alert; 
      import mx.events.CollectionEvent; 
      import mx.events.FlexEvent; 

      protected function randomizeData_click(event:MouseEvent):void 
      { 
       for each (var o:Object in data) 
       { 
        o.name = Math.round(Math.random() * 100); 
        o.selected = Math.random() < 0.5; 
       } 

       data.refresh(); 
      } 

     ]]> 
    </fx:Script> 

    <fx:Declarations> 
     <s:ArrayCollection id="data"> 
      <fx:Object name="1" selected="false" /> 
      <fx:Object name="2" selected="false" /> 
      <fx:Object name="3" selected="true" /> 
      <fx:Object name="4" selected="false" /> 
     </s:ArrayCollection> 
    </fx:Declarations> 

    <mx:DataGrid id="dataGrid" dataProvider="{data}" top="10" left="10" bottom="39" right="10"> 
     <mx:columns> 
      <mx:DataGridColumn headerText="Item" dataField="name"/> 
      <mx:DataGridColumn headerText="Selected" dataField="selected" itemRenderer="mx.controls.CheckBox" /> 
     </mx:columns> 
    </mx:DataGrid> 

    <s:Button label="Randomize Data" right="10" bottom="10" click="randomizeData_click(event)"/> 
</s:WindowedApplication> 
+0

ainsi, si je change l'attribut "choisi" et puis j'appelle data.refresh(), je mets à jour les cases à cocher dans mon DataGrid? – aneuryzm

+0

Oui, comme je l'ai montré dans l'exemple. L'appel de 'refresh' fera regarder' DataGrid' comme s'il était nouveau, en définissant la valeur de chaque itemRenderer' de façon appropriée, dont l'une sera vos cases à cocher. – icio

Questions connexes