我有一个绑定到ArrayCollection的AdvancedDataGrid(ADG)。 ArrayCollection从我的Oracle数据库填充。现在,我在数据库中的记录是数百万,有时,根据用户的最坏情况标准,我可以得到大约10,000条记录。现在,由于此集合绑定到ADG,它会尝试同时呈现所有记录,因此应用程序变得迟缓。
我需要知道的是,如果有任何方法可以在ArrayCollection中缓存数据库中的所有结果,然后根据网格的滚动呈现每100条记录。也就是说,仅在需要显示时才渲染。因此,我不需要每100条记录查询数据库,而是需要在需要显示时每100条记录一次。
有没有办法这样做?
谢谢:)
答案 0 :(得分:0)
您可以将数据加载到ArrayCollection,然后使用另一个来显示数据(您可能会过滤原始的ArrayCollection以仅显示100,但这更直接)。
<mx:ArrayCollection id="data">
...
</mx:ArrayCollection>
<mx:ArrayCollection id="display">
...
</mx:ArrayCollection>
<mx:VScrollBar id="bar"
minScrollPosition="0"
maxScrollPosition="1000000"
scroll="onScroll(event);"/>
private function onScroll(event:ScrollEvent):void
{
display.removeAll();
var index:int = (bar.scrollPosition/bar.maxScrollPosition) * data.length;
for(int i = 0; i < 100; i++)
{
display.addItem(data[i + index]);
}
}
确保将“display”作为ADG的dataProvider。如果你想要聪明,可能有一种方法可以不必从显示中删除所有元素。