1

大家好,我有一个示例 gridview在此处输入图像描述

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

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

4

3 回答 3

4

根据您使用的 XtraGrid 版本 - 也许您应该查看InstantFeedback

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

这样做的好处是——它是一个标准的 DevExpress 组件——所以你不必自己发明任何东西。

或者:

您可以通过以下方式强制执行该行为:

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

这假设您正在使用 a BindingSource(如果没有,您必须更改强制转换类型)。

我处理该RowStyle事件是因为该事件中的代码“一直”执行。

于 2013-03-18T07:00:29.283 回答
2

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

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;
}
于 2013-03-18T08:22:36.450 回答
1

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

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

问候,米舒

于 2013-03-18T07:15:34.507 回答