Flex AdvancedDataGrid缓存记录

时间:2009-07-07 16:17:01

标签: flex flex3 advanceddatagrid

我有一个绑定到ArrayCollection的AdvancedDataGrid(ADG)。 ArrayCollection从我的Oracle数据库填充。现在,我在数据库中的记录是数百万,有时,根据用户的最坏情况标准,我可以得到大约10,000条记录。现在,由于此集合绑定到ADG,它会尝试同时呈现所有记录,因此应用程序变得迟缓。

我需要知道的是,如果有任何方法可以在ArrayCollection中缓存数据库中的所有结果,然后根据网格的滚动呈现每100条记录。也就是说,仅在需要显示时才渲染。因此,我不需要每100条记录查询数据库,而是需要在需要显示时每100条记录一次。

有没有办法这样做?

谢谢:)

1 个答案:

答案 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。如果你想要聪明,可能有一种方法可以不必从显示中删除所有元素。