如何将数据DataGrid组件绑定无需滚动起来?(How to data bind DataGrid

2019-10-18 11:23发布

我有一个DataGrid组件,我想每5秒更新。 作为行被添加到这个DataGrid中我注意到,每一次更新使其复位滚动条位置更靠近顶部。 我如何设法保持滚动条在其前面的位置?

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

这是不是最好的代码,但它说明了这一点,只要有人完成了滚动事件,您最后一个位置保存在一个变量,你用它来恢复你已经添加了新的数据后,右边的滚动位置。



Answer 2:

我写了一个小的扩展类DataGrid基于这篇文章 。 它似乎工作的伟大。

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


Answer 3:

我还没有测试此代码,但它应该工作:

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


Answer 4:

这些可能会有所帮助:

保持异步回后滚动位置
保持在回发滚动位置 (滚动进一步向下阅读本)



文章来源: How to data bind DataGrid component without scrolling up?