2009-07-07 3 views
1

私はAdvancedDataGrid(ADG)をArrayCollectionにバインドしています。 ArrayCollectionはOracleデータベースから取り込まれます。さて、私がデータベースに持っているレコードは何百万もあり、時には、ユーザーの最悪の基準に基づいて、約10,000レコードを取得することができます。現在、このコレクションはADGにバインドされているため、すべてのレコードを同時にレンダリングしようとするため、アプリケーションが低速になります。 ArrayCollectionでデータベースからすべての結果をキャッシュして、グリッドのスクロールに基づくすべての100件のレコードをレンダリングするためにどのような方法がある場合は、私が知る必要がある何Flex AdvancedDataGridのキャッシングレコード

は、あります。つまり、表示する必要がある場合にのみ描画します。したがって、100レコードごとにデータベースを照会するのではなく、100レコードごとにレンダリングする必要があります。

次のように実行する方法はありますか?

感謝:)

+0

ページングを検討しましたか? http://www.iamboredsoiblog.eu/2009/01/10/advanced-paging-and-filtering-in-flex-datagrid/ –

+0

これが私の最初の選択でした。しかし、私たちはページングを望んでいません。だから、キャッシュされたソリューションを探していました。それは魅力のように動作します:) – online19

答えて

0

あなたがたArrayCollectionにデータをロードした後、(あなたはおそらく100を表示するために、あなたのオリジナルのArrayCollectionをフィルタリングすることができますが、これは、より簡単です)データを表示するために別のものを使用することができます。

<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からすべての要素を削除する必要はありません。

+0

ありがとう........ :) – online19

関連する問題