在当前项目中,我必须实现自定义无限滚动,这意味着当用户向下滚动页面以使最后一行至少部分可见时,我必须从数据库加载另一大量数据。
问题是检测最后一行是否可见。到目前为止,我提出了以下解决方案:
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();
}
}
在我按任何列对数据进行分组之前,这样可以正常工作。
正如您在图片上看到的那样,滚动到达最后一行,但从技术上讲,最后一行仍然隐藏在组头后面。
有没有办法确定滚动是否到达底部,无论数据是否已分组?
答案 0 :(得分:2)
您可以直接使用垂直滚动条进行操作,使您的代码更加紧凑和健壮:
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 参数以检查上一个滚动条状态和滚动方向。