2009-07-07 12 views
1

Ich habe eine AdvancedDataGrid (ADG) an eine ArrayCollection gebunden. ArrayCollection wird von meiner Oracle-Datenbank ausgefüllt. Jetzt sind die Datensätze, die ich in der Datenbank habe, in Millionen und manchmal, basierend auf den Worst-Case-Kriterien durch den Benutzer, kann ich ungefähr 10.000 Datensätze bekommen. Jetzt, da diese Sammlung an den ADG gebunden ist, versucht sie, alle Datensätze zur gleichen Zeit zu rendern und daher wird die Anwendung träge.Flex AdvancedDataGrid Caching Datensätze

Was ich wissen muss, ist, wenn es eine Möglichkeit gibt, alle Ergebnisse von der Datenbank in der ArrayCollection zwischenzuspeichern und dann alle 100 Datensätze basierend auf dem Bildlauf des Rasters zu rendern. Das heißt, nur rendern, wenn es angezeigt werden soll. Anstatt die Datenbank alle 100 Datensätze abzufragen, muss ich also alle 100 Datensätze rendern, wenn sie benötigt werden, um angezeigt zu werden.

Gibt es eine Möglichkeit, dies zu tun?

Thanks :)

+0

Haben Sie das Paging in Betracht gezogen? http://www.iamboredsoiblog.eu/2009/01/10/advanced-paging-and-filtering-in-flex-datagrid/ –

+0

Das war meine erste Option. Aber wir wollen nicht paging. Also, suchte nach einer zwischengespeicherten Lösung. Es funktioniert wie ein Charme :) – online19

Antwort

0

Sie Ihre Daten in eine Arraycollection laden und dann ein anderes verwenden, um die Daten anzuzeigen (Sie wahrscheinlich Ihre ursprüngliche Arraycollection filtern konnten nur 100 angezeigt werden, aber dies ist einfacher).

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

Achten Sie darauf, "Display" als DataProvider Ihres ADG zu haben. Wenn Sie clever sein wollen, gibt es wahrscheinlich eine Möglichkeit, nicht alle Elemente aus dem Display entfernen zu müssen.

+0

Danke ........ :) – online19