1

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

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

有什么办法可以这样做吗?

谢谢 :)

4

1 回答 1

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]);
    }
}

确保将“显示”作为您的 ADG 的数据提供者。如果你想聪明一点,可能有一种方法不必从 Display 中删除所有元素。

于 2009-07-07T17:04:40.403 回答