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

时间:2017-07-13 07:55:15

标签: c# winforms devexpress devexpress-windows-ui

在当前项目中,我必须实现自定义无限滚动,这意味着当用户向下滚动页面以使最后一行至少部分可见时,我必须从数据库加载另一大量数据。

问题是检测最后一行是否可见。到目前为止,我提出了以下解决方案:

    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();
        }
    }

在我按任何列对数据进行分组之前,这样可以正常工作。

enter image description here

正如您在图片上看到的那样,滚动到达最后一行,但从技术上讲,最后一行仍然隐藏在组头后面。

有没有办法确定滚动是否到达底部,无论数据是否已分组?

1 个答案:

答案 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 参数以检查上一个滚动条状态和滚动方向。