大家好我有一个示例gridview
这就是我想要发生的事情。
当我打开表单时,我将服务器中的前100个数据加载到gridview中。当我向下滚动并到达滚动条的末尾时,我想从101 - 200加载另一个数据。 所以gridview中的数据是1到200。 如何确定滚动条是否到达结尾?
答案 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事件,看看是否需要再加载行。 对于这种情况,这是一种更手动的方法。
此外,您可以在服务器模式下使用网格,为您执行此操作。
此致 秘书科