检查网格是否一直滚动到底部

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参数来查看之前的滚动条状态和滚动方向。