Apache flex 使用分层数据刷新Datagrid
当基础ArrayCollection更改时,如何刷新Datagrid中显示的数据Apache flex 使用分层数据刷新Datagrid,apache-flex,actionscript-3,Apache Flex,Actionscript 3,当基础ArrayCollection更改时,如何刷新Datagrid中显示的数据 <nmoschitz:dataProvider> <mx:HierarchicalData source="{arrCol_groupedData}" childrenField="accounts"/> </nmoschitz:dataProvider> 调用简单刷新(如使用简单arraycollection作为数据提供程序,或使用分组集合上的刷
<nmoschitz:dataProvider>
<mx:HierarchicalData source="{arrCol_groupedData}"
childrenField="accounts"/>
</nmoschitz:dataProvider>
调用简单刷新(如使用简单arraycollection作为数据提供程序,或使用分组集合上的刷新)不起作用。
另外,将arrayCollection重新分配给分层数据,然后再将此集合分配给Datagrid也不起作用(即使调用invalidateProperties()或validateNow())
有什么想法吗?有人建议扩展HierarchycalData并抛出一个手动更改事件,但这对我来说似乎非常不利
谢谢,
Martin我将整个分层数据重新分配给了datagrid。但是,只有arraycollection需要重新分配给分层数据。这就解决了问题。您可以扩展
层次结构数据
并覆盖源
属性设置器以引发CollectionChange事件:
package mypackage
{
import mx.collections.HierarchicalData;
import mx.events.CollectionEvent;
import mx.events.CollectionEventKind;
public class ModifiedHierarchicalData extends HierarchicalData
{
override public function set source(value:Object):void
{
super.source = value;
var event:CollectionEvent =
new CollectionEvent(CollectionEvent.COLLECTION_CHANGE) ;
event.kind = CollectionEventKind.RESET;
dispatchEvent(event);
}
}
}
您可以尝试刷新arrayCollection,然后在网格上调用invalidateList()只要展开根节点并以编程方式再次关闭,就会刷新UI
if(!dGGrid.isItemOpen(itemData)){
dGGrid.expandItem(itemData,true);
dGGrid.expandItem(itemData,false)
}else{
dGGrid.expandItem(itemData,false);
dGGrid.expandItem(itemData,true);
}
我将整个分层数据重新分配给datagrid。但是,只有arraycollection需要重新分配给分层数据。这就解决了问题。首先检查(super.source!=value)是否可以节省一些噪音。