【问题标题】:How to data bind DataGrid component without scrolling up?如何在不向上滚动的情况下绑定 DataGrid 组件?
【发布时间】:2009-11-28 09:55:46
【问题描述】:

我有一个 DataGrid 组件,我想每 5 秒更新一次。在将行添加到此 DataGrid 时,我注意到每次更新都会将滚动条位置重置为顶部。如何使滚动条保持在之前的位置?

【问题讨论】:

  • 谢谢!您的代码帮助我将 3 个不同的数据网格滚动条同步到同一行。保存了我的数据...

标签: apache-flex data-binding datagrid scrollbar


【解决方案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;
}

这不是最好的代码,但它说明了这一点,每当有人完成滚动事件时,您将最后一个位置存储在一个变量中,并在添加新数据后立即使用它来恢复滚动位置。

【讨论】:

    【解决方案2】:

    我在this article 的基础上为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;
            }
    }   
    

    【讨论】:

      【解决方案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);
      

      【讨论】:

        【解决方案4】:

        这些可能会有所帮助:

        Maintain Scroll Position after Asynchronous Postback
        Maintaining Scroll Position on Postback(向下滚动以阅读此内容)

        【讨论】:

        • (-1) 我使用的是 Flex - 不是 ASP.Net。
        猜你喜欢
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-23
        • 1970-01-01
        • 1970-01-01
        • 2011-08-17
        • 1970-01-01
        相关资源
        最近更新 更多