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?

War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top