2017-07-13 81 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參數來檢查前面的滾動狀態和滾動方向。