滚动条到达底部时Gridview自动加载数据

时间:2013-03-18 03:54:59

标签: c# c#-4.0 gridview devexpress scrollbar

大家好我有一个示例gridview enter image description here

这就是我想要发生的事情。

当我打开表单时,我将服务器中的前100个数据加载到gridview中。当我向下滚动并到达滚动条的末尾时,我想从101 - 200加载另一个数据。 所以gridview中的数据是1到200。 如何确定滚动条是否到达结尾?

3 个答案:

答案 0 :(得分:3)

取决于您使用的XtraGrid的版本 - 也许您应该查看InstantFeedback

这是一个数据源,当它们进入视图时动态地获取行。

关于这一点的好处是 - 它是一个标准的DevExpress组件 - 所以你不必自己发明任何东西。

OR:

你可以用这样的东西强迫这种行为:

    private bool _working = false;
    private void view_RowStyle(object sender, RowStyleEventArgs e)
    {
      if(_working) return;

      var view = sender as GridView;
      if (view != null)
      {
        int lastRowIndex = (view.GridControl.DataSource as BindingSource).Count;
        if (view.IsRowVisible(lastRowIndex) == RowVisibleState.Visible)
        {
          _working = true;
          //go get more rows.
          _working = false;
        }
      }
    }

这假设你使用BindingSource(如果没有,你必须改变演员类型)。

我处理RowStyle事件,因为此事件中的代码是“所有时间”执行的。

答案 1 :(得分:2)

您可以通过处理GridControl嵌入式滚动条的Scroll事件来处理滚动结束(以及任何其他条件)。
这是方法细节:

var sb = GetScrollBar(gridControl1, ScrollBarType.Vertical);
sb.Scroll += new ScrollEventHandler(sb_Scroll);
//...
void sb_Scroll(object sender, ScrollEventArgs e) {
    var scrollBar = sender as DevExpress.XtraEditors.ScrollBarBase;
    if(e.NewValue == (scrollBar.Maximum - scrollBar.LargeChange)) {
        MessageBox.Show("Last row is reached!");
    }
}
ScrollBarBase GetScrollBar(GridControl gridControl, ScrollBarType type) {
    foreach(Control c in gridControl.Controls) {
        var scrollBar = c as ScrollBarBase;
        if(scrollBar != null && scrollBar.ScrollBarType == type)
            return scrollBar;
    }
    return null;
}

答案 2 :(得分:1)

您可以根据已加载的总行数获取显示的行数并计算,并检查TopRowChanged事件,看看是否需要再加载行。 对于这种情况,这是一种更手动的方法。

此外,您可以在服务器模式下使用网格,为您执行此操作。

此致 秘书科