2009-11-28 76 views
1

我有一個DataGrid組件,我想每5秒更新一次。當行被添加到這個DataGrid中時,我注意到每次更新都會導致它將滾動條位置重置到頂部。我如何設法將滾動條保持在原來的位置?如何在不向上滾動的情況下綁定DataGrid組件?

+0

謝謝!您的代碼幫助我將3個不同的數據網格滾動條同步到同一行。 保存我的數據... – 2011-10-06 20:35:49

回答

1

我寫了一個小的擴展類DataGrid基於this article。它似乎很好。

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; 
     } 
} 
1

使變量來存儲你的最後滾動位置並使用它。

大致是這樣的:

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

這是不是最好的代碼,但它說明了這一點,只要有人完成了滾動事件,你存儲在變量中的最後一個位置,你用它來恢復滾動位置在添加新數據之後。

0

我還沒有測試此代碼,但它應該工作:

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); 
相關問題