2017-07-13 45 views
0

在当前项目中,我必须实现自定义无限滚动,这意味着当用户向下滚动页面以使最后一行至少部分可见时,我必须加载另一个散列来自数据库的数据。检查网格是否一直滚动到底部

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

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

正如你可以在图片中看到,滚动到达了最后一排,但在技术上的最后一排仍隐藏组头后面。

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

回答

2

您可以使用垂直滚动条直接操作,使您的代码更stratightforward和健壮:

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