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
も送出します。これは、その dataProvider 内のデータが変更され、それらの変更を反映するために再描画する必要があることを に通知します。DataGrid

一方、あなたがそうするなら

DGArray.push(theNewItem);

あなたがしたように、基になる配列を直接変更します。これは実際には何も壊しません。ArrayCollection.getItemAt() などを介して新しいアイテムにアクセスすることもできますが、DataGrid には変更が通知されなかったため、再描画されず、古いデータが表示され続けます。

于 2013-05-06T13:45:46.340 に答える