2009-06-24 5 views
0

Salut je voulais savoir s'il est possible d'avoir les deux chaînes et boutons radio dans une colonne en fonction de la valeur d'une autre colonne peut-êtreplusieurs composants DataGrid dans une colonne

|column1 | column 2 | 
|r  | radiobutton| 
|s  | string  | 

S'il y a une r dans la colonne 1 dans la colonne 2 devrait apparaître un radiobutton, sinon la colonne 2 montre juste une chaîne.

Merci pour vos réponses

Sebastian

Répondre

1

Vous devez écrire un rendu d'élément pour cela. Cependant, vous voulez mettre à jour l'état du rendu chaque fois que la propriété "data" est définie. Ceci est important car les rendus d'éléments sont recyclés. Fondamentalement, la propriété data est définie chaque fois que les données de ce moteur de rendu changent et cela se produit lorsque vous faites défiler le DataGrid.

est ici une simple application avec un DataGrid:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()"> 

<mx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 

     [Bindable] private var collection:ArrayCollection; 

     private function onCreationComplete():void 
     { 
      collection = new ArrayCollection(); 
      for (var i:uint = 0; i < 20; i++) 
       collection.addItem({name:'Person #'+i}); 
     } 

    ]]> 
</mx:Script> 

<mx:DataGrid width="600" dataProvider="{collection}" rowCount="5"> 
    <mx:columns> 
     <mx:DataGridColumn itemRenderer="com.foo.ItemRenderer"/> 
    </mx:columns> 
</mx:DataGrid> 

</mx:Application> 

Et simple renderer MXML-:

<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml"> 

<mx:Script> 
    <![CDATA[ 

     override public function set data(value:Object):void 
     { 
      super.data = value; 
      // only show radio buttons if the "name" property of the data contains "5"; otherwise show a label 
      radioS.visible = radioS.includeInLayout = radioM.visible = radioM.includeInLayout = radioL.visible = radioL.includeInLayout = data.name.indexOf(5) > -1; 
      labelName.visible = labelName.includeInLayout = data.name.indexOf(5) < 0;    
     } 

    ]]> 
</mx:Script> 

<mx:Label id="labelName" text="{data.name}"/> 
<mx:RadioButton id="radioS" label="Small" groupName="radioGroup"/> 
<mx:RadioButton id="radioM" label="Medium" groupName="radioGroup"/> 
<mx:RadioButton id="radioL" label="Large" groupName="radioGroup"/> 

</mx:HBox> 
1

Vous devez écrire votre propre itemRenderer. D'un haut niveau, ce que vous devez faire est de dire à la colonne que vous allez rendre la colonne sur une base par ligne. Puis, par ligne - vous vérifiez le conditionnel dont vous avez besoin (comme regarder une colonne différente ou autre chose) et prenez l'action que vous voulez (comme ajouter un bouton radio par rapport à un autre composant).

Dans la colonne de données font quelque chose comme ceci:

<mx:DataGridColumn id="yourColumn" 
headerText="Cool Column" editable="false" itemRenderer="SpecialCanvas"/> 

Puis, dans un composant appelé « SpecialCanvas » (disons qu'il étend une toile), vous pouvez peut les événements ou remplacer les méthodes pour rendre au besoin .. Par exemple:

override protected function initializationComplete():void 
{ 
    // check for the conditional that you want and add the component that 
    // you need to this canvas or what not. 
} 
Questions connexes