0

我在 flex 中有一个 mxml 视图,我需要将数据动态添加到 DataGrid 组件。

这是初始化 DataGrid 的地方:

<mx:DataGrid id="myGrid" width="100%"
    dataProvider="{initDG}" >
    <mx:columns>
        <mx:DataGridColumn dataField="Identifier" />
        <mx:DataGridColumn dataField="Name" />
    </mx:columns> 
</mx:DataGrid>

这是脚本部分:

private var DGArray:Array = new Array;

[Bindable]
public var initDG:ArrayCollection;

private function onCreation():void{
    initData();
}

public function initData():void {
   initDG=new ArrayCollection(DGArray);
 }

private function onShow():void{
    for (var child:Object in children) {
          var details:Array = null;
          if (child instanceof String) {
              var test:String = children[child].toString();
              details = test.split(",");
          }
          //Here I need to make an object like this one:
          // record = {Identifier: details[0] , Name: details[1]};

          this.DGArray.push(the record created);
    }


}

我这样做是因为如果DGArray是静态数组,它就可以工作:

 private var DGArray:Array = [
     {Identifier:'001', Name:'Slanted and Enchanted'},
     {Identifier:'002', NAme:'Brighten the Corners'}];

谁能告诉我如何创建记录并将其添加到 DGArray 中?

谢谢:)

4

1 回答 1

0

简而言之

ArrayCollection通过实例而不是通过实例添加或删除项目Array

这就是为什么

ArrayCollection- 正如它的名字所暗示的那样 - 实际上只不过是一个包装器Array,它添加了一些在使用 Flex 框架时派上用场的功能。

所以当你这样做时

initDG.addItem(theNewItem);

该新项目也将自动添加到基础数组中。
此外,此函数还将调度CollectionEvent,它将通知DataGrid其 dataProvider 中的数据已更改,并且应重新绘制以反映这些更改。

另一方面,如果你这样做

DGArray.push(theNewItem);

像你一样,你直接改变底层数组。这并没有真正破坏任何东西。您仍然可以通过例如 ArrayCollection.getItemAt() 访问新项目,但是 DataGrid 从未收到更改通知,因此它没有重绘并继续显示旧数据。

于 2013-05-06T13:45:46.340 回答