2009-12-09 5 views
0

Est-ce que quelqu'un sait comment ajouter une nouvelle ligne à un DataGrid via une case à cocher.Flex Datagrid ajouter dynamiquement des lignes via checkboxex

exemple:

checkbox 1 : label (PS2) 
    checkbox 2 : label (PS3) 
    checkbox 3 : label (PSP) 

En sélectionnant une ou toutes ces cases à cocher i ce que pour ajouter une nouvelle ligne Datagrid.

Datagrid 

    Console   price 
    row1 PS2   $20, 
    row2 PS3   $30, 
    row3 PSP   $15, 

J'espère que cet exemple est assez clair grâce

DJ

Répondre

2

Ajouter un élément à la dataProvider du DataGrid du gestionnaire d'événements change du CheckBox - assurez-vous vérifier les éléments existants (et les supprimer lorsque la case n'est pas cochée) pour éviter les doublons. Si vous pouvez publier le code de DataGrid, nous pourrions être en mesure de donner un exemple de code montrant comment faire cela.

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
    creationComplete="create()"> 
    <mx:DataGrid id="dg" dataProvider="{dp}"> 
     <mx:columns> 
     <mx:DataGridColumn dataField="console"/> 
     <mx:DataGridColumn dataField="price"/> 
     </mx:columns> 
    </mx:DataGrid> 
    <mx:CheckBox id="cb1" change="onCheck(event)"/> 
    <mx:CheckBox id="cb2" change="onCheck(event)"/> 
    <mx:CheckBox id="cb3" change="onCheck(event)"/> 
    <mx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      private var prices:Array = ["$20", "$30", "$15"]; 
      private var labels:Array = ["PS1", "PS2", "PS3"]; 
      private var checkBoxes:Array; 
      [Bindable]public var dp:ArrayCollection; 
      private function create():void 
      { 
       checkBoxes = [cb1, cb2, cb3]; 
       for(var i:Number = 0; i < labels.length; i++) 
        CheckBox(checkBoxes[i]).label = labels[i]; 
       dp = new ArrayCollection([]); 
      } 
      private function onCheck(event:Event):void 
      { 
       var cb:CheckBox = CheckBox(event.currentTarget); 
       var index:Number = indexOf(cb.label); 
       if(cb.selected && index == -1) 
        dp.addItem({console:cb.label, 
         price:prices[labels.indexOf(cb.label)]}); 
       else if(!cb.selected && index != -1) 
        dp.removeItemAt(index); 
      } 
      private function indexOf(str:String):Number 
      { 
       for(var i:Number = 0; i < dp.length; i++) 
       { 
        var item:Object = dp.getItemAt(i); 
        if(item.console == str) 
         return i; 
       } 
       return -1; 
      } 
     ]]> 
    </mx:Script> 
</mx:Application> 
+0

Merci pour votre réponse. J'ai utilisé votre concept. J'ai enlevé les prix var. Parce que les valeurs de la colonne des prix sont définies sur modifiable. Les prix peuvent être définis par un utilisateur. Mais maintenant je suis coincé sur une autre question? Comment puis-je attraper les valeurs de ces lignes et les stocker chacune dans leur var. signifie donc: Mémorisation de la valeur de la colonne du prix ps1 dans var pricePS1 Mémorisation de la valeur de la colonne du prix ps2 dans var pricePS2 Mémorisation de la valeur de la colonne du prix ps3 dans var pricePS3 ect, Merci pour votre aide DJ –

Questions connexes