我在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吗?
感谢:)
答案 0 :(得分:0)
通过ArrayCollection
实例而不是Array
实例添加或删除项目。
ArrayCollection
- 正如其名称所暗示的那样 - 实际上只是Array
的一个包装器,为它添加了一些在使用Flex框架时派上用场的功能。
所以当你这样做时
initDG.addItem(theNewItem);
新项目也会自动添加到基础数组中
此外,此函数还将调度CollectionEvent,它将通知DataGrid
其dataProvider中的数据已更改,应重新绘制以反映这些更改。
如果另一方面你做了
DGArray.push(theNewItem);
像你一样,你直接改变底层数组。这并没有真正破坏任何东西;你仍然可以通过例如访问新项目ArrayCollection.getItemAt()也是如此,但DataGrid从未被通知过更改,因此它没有重绘并继续显示旧数据。