2009-12-09 76 views
0

有谁知道如何通过复选框向数据网格添加新行。Flex Datagrid通过checkboxex动态添加行

例如:

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

通过选择一个或所有这些复选框我的添加什么新的DataGrid行。

Datagrid 

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

我希望这个例子是非常明显的 感谢

DJ

回答

2

项目添加到自CheckBox的change事件处理DataGrid的dataProvider - 请务必检查现有项目(并且在取消选中复选框时删除它们)以避免重复。如果你可以发布DataGrid的代码,我们可以给出一个示例代码来展示如何做到这一点。

<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

谢谢你的接吻。 我用过你的概念。我删除了价格变种。 由于价格列的值设置为可编辑。价格可以由用户设置。但是现在我又陷入另一个问题了? 我如何捕获这些行的值并将它们存储在它们的onw var中。 因此表示: 存放PS1价格的列值VAR pricePS1 存放PS2价格的列值VAR pricePS2 在VAR pricePS3 ECT存放PS3价格的列值, 感谢您的帮助 DJ – 2009-12-09 23:11:08