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

C# 滚动条到达底部时Gridview自动加载数据,c#,c#-4.0,gridview,devexpress,scrollbar,C#,C# 4.0,Gridview,Devexpress,Scrollbar,大家好,我有一个gridview示例 这就是我想要发生的事情 当我打开表单时,我将前100个数据从服务器加载到gridview。当我向下滚动并到达滚动条的末端时,我想从101-200加载另一个数据。 所以gridview中的数据是1到200。 如何确定滚动条是否到达末尾?取决于您使用的XtraGrid版本-也许您应该签出 当行进入视图时,它是一个动态获取行的数据源 最棒的是,它是一个标准的DevExpress组件,所以你不必自己发明任何东西 或: 你可以用这样的东西强迫这种行为: pri

大家好,我有一个gridview示例

这就是我想要发生的事情

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

取决于您使用的XtraGrid版本-也许您应该签出

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

最棒的是,它是一个标准的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;
        }
      }
    }
这假定您使用的是BindingSource。如果不是,则必须更改强制转换类型


我处理RowStyle事件,因为此事件中的代码一直在执行。

取决于您使用的XtraGrid版本-也许您应该签出

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

最棒的是,它是一个标准的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;
        }
      }
    }
这假定您使用的是BindingSource。如果不是,则必须更改强制转换类型


我处理RowStyle事件,因为此事件中的代码一直在执行。

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

此外,您还可以在服务器模式下使用网格,它可以为您实现这一点

问候,,
Mishu

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

此外,您还可以在服务器模式下使用网格,它可以为您实现这一点

问候,,
Mishu

您可以通过处理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;
}

您可以通过处理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;
}

我使用的是v10.1。我将所有数据加载到数据源中,但我不想加载所有数据。我只想知道如何确定滚动是否到达底部。我希望我的gridView能够像facebook一样运行,一旦你向下滚动它就会加载旧的状态。谢谢:好的-即时反馈在v之前不可用。11.x。我更新了我的答案谢谢你的帮助。我想这是最后一行。问题是,如果我使用滚动条,它不会触发。对不起,我刚刚发现,当我使用滚动条并单击网格时,它只会触发。有没有办法不一直触发这个?@Snippet hmmm显然你可以添加一个包装所有代码的条件,但我不确定这个条件应该是什么。嗯,也许你需要一个类似旗帜的东西来标记你正在工作。请参阅编辑应答我正在使用v10.1。我将所有数据加载到数据源中,但我不想加载所有数据。我只想知道如何确定滚动是否到达底部。我希望我的gridView能够像facebook一样运行,一旦你向下滚动它就会加载旧的状态。谢谢:好的-即时反馈在v之前不可用。11.x。我更新了我的答案谢谢你的帮助。我想这是最后一行。问题是,如果我使用滚动条,它不会触发。对不起,我刚刚发现,当我使用滚动条并单击网格时,它只会触发。有没有办法不一直触发这个?@Snippet hmmm显然你可以添加一个包装所有代码的条件,但我不确定这个条件应该是什么。嗯,也许你需要一个类似旗帜的东西来标记你正在工作。请参见编辑回答谢谢@DmitryG。代码运行完美,但如果我使用鼠标滚轮,它不会触发。谢谢@DmitryG。代码运行得很完美,但如果我使用鼠标滚轮,它不会触发。