Wie Sie Daten binden DataGrid-Komponente ohne scrollen nach oben?
-
06-07-2019 - |
Frage
Ich habe eine DataGrid-Komponente, die ich möchte, aktualisiert alle 5 Sekunden.Zeilen, die Hinzugefügt wird, um das DataGrid-ich bemerkt, dass jedes update bewirkt, dass es zu reset die Bildlaufleiste position nach oben.Wie kann ich verwalten die Bildlaufleiste an seiner vorherigen position?
Lösung 2
schrieb ich eine kleine Erweiterung Klasse basierend auf DataGrid "http://joelhooks.com/2008/02/07/flex-preventing-datagrid-scrolling-when-the-dataprovider-is-updated/ "rel =" nofollow noreferrer "> dieser Artikel . Es scheint sehr gut zu funktionieren.
public final class DataGridEx extends DataGrid
{
public var maintainScrollAfterDataBind:Boolean = true;
public function DataGridEx()
{
super();
}
override public function set dataProvider(value:Object):void {
var lastVerticalScrollPosition:int = this.verticalScrollPosition;
var lastHorizontalScrollPosition:int = this.horizontalScrollPosition;
super.dataProvider = value;
if(maintainScrollAfterDataBind) {
this.verticalScrollPosition = lastVerticalScrollPosition;
this.horizontalScrollPosition = lastHorizontalScrollPosition;
}
}
Andere Tipps
machen Sie eine variable zum speichern Ihrer zuletzt die scroll-position und verwenden.
in etwa so etwas wie:
var lastScroll:Number = 0;
private function creationCompleteHandler(event:FlexEvent):void{
stage.addEventListener(MouseEvent.MOUSE_UP, updateLastScroll);
}
private function updateLastScroll(event:MouseEvent):void{
lastScroll = myDataGrid.verticalScrollPosition
}
private function dataGridHandler(event:Event):void{
myDataGrid.verticalScrollPosition = lastScroll;
}
Es ist nicht der beste code, aber es zeigt den Punkt, wenn jemand endet das scroll-Ereignis, Sie speichern die Letzte position in einer Variablen, und verwenden Sie das wiederherstellen der scroll-position nach rechts, nachdem Sie habe Hinzugefügt neue Daten.
Ich habe diesen Code nicht getestet, aber es sollte funktionieren:
var r:IListItemRenderer;
var len:Number = dataGrid.dataProvider.length;
var i:Number;
//indexToItemRenderer returns null for items that are not visible
for(i = 0; i < len; i++)
{
r = dataGrid.indexToItemRenderer(i);
if(r)
break;
}
//now i contains the first visible item - store this in a variable
lastPos = i;
//update the dataprovider here.
//now scroll to the position
dataGrid.scrollToIndex(lastPos);
Diese könnten helfen:
pflegen Scroll Position nach Asynchronous Postback
pflegen Scroll Position auf Postback (Scroll weiter nach unten, dies zu lesen)