2009-07-04 10 views
0

J'ai 3 cases à cocher pour le calcul du montant. Je Datagrid au sein datgrid utiliséComment trouver la valeur de case à cocher (cochée/décochée) dans iteamreander de la grille de données?

<mx:DataGrid> 
    <mx:itemRenderer> 
     <mx:Component> 
      <mx:CheckBox id=mycheckbox change="calc()"/> 
     </mx:Component> 
    </mx:itemRenderer> 
... 

public function calc():void 
{ 
    statistic.dataProvider = mycheckbox.selectedItem; 
} 

mais il est jette erreur comme appel à la méthode undfined éventuellement (calc)

Répondre

0

Une case à cocher ne dispose pas d'une fonction "selectedItem" ou bien ...

myCheckBox .selected retournera vrai ou faux selon que la case à cocher sed est cochée ou non

Pas vraiment sûr de ce que vous essayez d'accomplir en mettant un fournisseur de données à vrai ou faux, me semble que vous voulez utiliser un RadioButtonGroup

3

Vous ne pouvez pas donner à la case un identifiant comme vous l'avez fait et vous attendre à ce qu'il se comporte comme un seul composant. Lorsque vous cochez la case en tant que rendu d'élément pour une colonne, vous ne parlez pas d'une seule case. Vous aurez affaire à autant de cases à cocher que de lignes dans la grille de données. L'exemple suivant vous montre comment déterminer si la case à cocher dans une ligne particulière est sélectionnée ou non

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
       layout="vertical" 
       creationComplete="init()"> 
    <mx:Script> 
     <![CDATA[ 
    import mx.collections.ArrayCollection; 
    import mx.controls.Alert; 

    private var ac:ArrayCollection=new ArrayCollection([ 
             {name: "John", test: true}, 
             {name: "Joe", test: false}]); 

    private function init() { 
     dg.dataProvider=ac; 
    } 
    public function check():void { 
     var obj:Object=dg.selectedItem; 
     Alert.show("Checkbox=" + obj.test); 
    } 
     ]]> 
    </mx:Script> 
    <mx:DataGrid id="dg" 
       dataProvider="{ac}" 
       click="check()"> 
     <mx:columns> 
      <mx:DataGridColumn dataField="name"> 

      </mx:DataGridColumn> 
      <mx:DataGridColumn> 
       <mx:itemRenderer> 
        <mx:Component> 
         <mx:CheckBox label="Test" 
            selected="{data.test}"/> 
        </mx:Component> 
       </mx:itemRenderer> 
      </mx:DataGridColumn> 

     </mx:columns> 

    </mx:DataGrid> 
</mx:Application> 

flex semble parfois avoir du mal à mettre à jour le fournisseur de données pour la grille de données lorsque vous avez un itemRenderer imbriqué. Vous pouvez définir explicitement la propriété appropriée de la ligne dataProvider lorsque l'événement change se produit dans la case à cocher comme ci-dessous;

<mx:itemRenderer> 
    <mx:Component> 
     <mx:CheckBox label="Test" selected="{data.test}" 
        change="data.test=selected"/> 
     </mx:Component> 
</mx:itemRenderer> 
+0

A travaillé super! Sur la deuxième partie, obtenait une erreur avec change = "data.test = selected", a dû le changer pour changer = "data.test =! Data.test" – Edyn

0

utilisez outerDocument.functionname à l'intérieur de itemrenderer et définissez la fonction comme publique. Ceci est une limitation de Flex, mauvaise gestion hiérarchique.

Questions connexes