大家好,我有一个示例 gridview
这就是我想要发生的事情。
当我打开表单时,我将前 100 个数据从服务器加载到 gridview 中。当我向下滚动并到达滚动条的末尾时,我想从 101 加载另一个数据 - 200。所以 gridview 中的数据是 1 到 200。如何确定滚动条是否到达末尾?
大家好,我有一个示例 gridview
这就是我想要发生的事情。
当我打开表单时,我将前 100 个数据从服务器加载到 gridview 中。当我向下滚动并到达滚动条的末尾时,我想从 101 加载另一个数据 - 200。所以 gridview 中的数据是 1 到 200。如何确定滚动条是否到达末尾?
根据您使用的 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
事件是因为该事件中的代码“一直”执行。
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;
}
您可以获取显示的行数并根据加载的总行数进行计算,并检查 TopRowChanged 事件并查看是否需要加载更多行。对于这种情况,这是一种更手动的方法。
您也可以在服务器模式下使用网格来为您执行此操作。
问候,米舒