检查网格是否一直滚动到底部
Check if grid is scrolled all the way to the bottom
在当前项目中,我必须实现自定义无限滚动,这意味着当用户向下滚动页面以使最后一行至少部分可见时,我必须从数据库中加载另一批数据。
问题是检测最后一行是否可见。到目前为止,我想出了以下解决方案:
gridView.TopRowChanged += GridView_TopRowChanged;
private void GridView_TopRowChanged(object sender, EventArgs e)
{
var rowVisibleState = gridView.IsRowVisible(gridView.DataRowCount - 1);
if (rowVisibleState == RowVisibleState.Visible
|| rowVisibleState == RowVisibleState.Partially)
{
LoadData();
}
}
在我按任意列对数据进行分组之前,一切正常。
如图所示,滚动到最后一行,但从技术上讲,最后一行仍然隐藏在组后面 header。
无论数据是否分组,有没有办法确定滚动是否到达底部?
您可以直接使用垂直滚动条进行操作,让您的代码更加简洁健壮:
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
var scrollBar = gridControl1.Controls.OfType<VCrkScrollBar>().FirstOrDefault();
scrollBar.Scroll += ScrollBar_Scroll;
}
private void ScrollBar_Scroll(object sender, ScrollEventArgs e) {
if (e.NewValue == ((IScrollBar)sender).ViewInfo.VisibleMaximum) {
LoadMoreData();
}
}
此外,您可以查看e.OldValue参数来查看之前的滚动条状态和滚动方向。
在当前项目中,我必须实现自定义无限滚动,这意味着当用户向下滚动页面以使最后一行至少部分可见时,我必须从数据库中加载另一批数据。
问题是检测最后一行是否可见。到目前为止,我想出了以下解决方案:
gridView.TopRowChanged += GridView_TopRowChanged;
private void GridView_TopRowChanged(object sender, EventArgs e)
{
var rowVisibleState = gridView.IsRowVisible(gridView.DataRowCount - 1);
if (rowVisibleState == RowVisibleState.Visible
|| rowVisibleState == RowVisibleState.Partially)
{
LoadData();
}
}
在我按任意列对数据进行分组之前,一切正常。
如图所示,滚动到最后一行,但从技术上讲,最后一行仍然隐藏在组后面 header。
无论数据是否分组,有没有办法确定滚动是否到达底部?
您可以直接使用垂直滚动条进行操作,让您的代码更加简洁健壮:
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
var scrollBar = gridControl1.Controls.OfType<VCrkScrollBar>().FirstOrDefault();
scrollBar.Scroll += ScrollBar_Scroll;
}
private void ScrollBar_Scroll(object sender, ScrollEventArgs e) {
if (e.NewValue == ((IScrollBar)sender).ViewInfo.VisibleMaximum) {
LoadMoreData();
}
}
此外,您可以查看e.OldValue参数来查看之前的滚动条状态和滚动方向。