Flex AdvancedDataGrid 缓存记录

发布于 2024-07-25 21:51:11 字数 378 浏览 11 评论 0原文

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

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

有什么办法可以做到这一点吗?

谢谢 :)

I have an AdvancedDataGrid(ADG) bound to an ArrayCollection. ArrayCollection is populated from my Oracle database. Now, the records I have in the database are in millions and sometimes, based on the worst case criteria by the user, I can get around 10,000 records. Now, as this collection is bound to the ADG, it tries to render all the records at the same time and hence the application becomes sluggish.

What I need to know is, if there is any way to cache all the result from the database in the ArrayCollection and then render every 100 records based on the scrolling of the grid. That is, render only when it is needed to be shown. So, instead of querying the database for every 100 records, I need to render every 100 records when they are needed to be shown.

Is there any way to do like this?

Thanks :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

っ左 2024-08-01 21:51:11

您可以将数据加载到 ArrayCollection,然后使用另一个 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 的数据提供者。 如果你想聪明一点,可能有一种方法可以不必从 Display 中删除所有元素。

You can load your data to an ArrayCollection and then use another one to display the data (You could probably filter your original ArrayCollection to display just 100, but this is more straightforward).

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

Be sure to have "display" as your ADG's dataProvider. If you want to be clever, there is probably a way to not have to remove all the elements from Display.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文