1

AdvancedDataGrid(ADG)をArrayCollectionにバインドしています。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のdataProviderとして必ず「display」を使用してください。賢くなりたい場合は、ディスプレイからすべての要素を削除する必要がない方法がおそらくあります。

于 2009-07-07T17:04:40.403 に答える