如何检测滚动条何时到达数据网格视图的末尾

本文关键字:网格 数据网 数据 视图 何检测 检测 何时 滚动条 | 更新日期: 2023-09-27 18:27:25

我想检测滚动条何时到达数据网格视图的末尾,这样我就可以在发生这种情况时运行一个函数。

我正在探索Scroll活动,但没有成功。

谢谢。

如何检测滚动条何时到达数据网格视图的末尾

这应该会让你接近。。。把它放在Scroll事件中,它会告诉你最后一行何时可见:

  int totalHeight = 0;
  foreach (DataGridViewRow row in dataGridView1.Rows)
    totalHeight += row.Height;
  if (totalHeight - dataGridView1.Height < dataGridView1.VerticalScrollingOffset)
  {
    //Last row visible
  }

这里有另一种方法…

private void dataGrid_Scroll(object sender, ScrollEventArgs scrollEventArgs)
{
    if (dataGrid.DisplayedRowCount(false) + 
        dataGrid.FirstDisplayedScrollingRowIndex
        >= dataGrid.RowCount)
    {
        // at bottom
    }
    else
    {
        // not at bottom
    }
}

这是一个替代解决方案:

每次移动滚动条时都会运行滚动事件。根据您的使用情况,这可能会导致问题或性能不佳。因此,更好的方法是只有当用户通过处理EndScroll事件释放滚动条时才运行检查和函数。

但是,您必须使用LINQ来访问datagridview's ScrollBar控件,并设置如下事件处理程序:

using System.Linq;
public MyFormConstructor()
{
    InitializeComponent();
    VScrollBar scrollBar = dgv.Controls.OfType<VScrollBar>().First();
    scrollBar.EndScroll += MyEndScrollEventHandler;
}
private void MyEndScrollEventHandler(object sender, ScrollEventArgs e)
{
   if (dgv.Rows[dgv.RowCount - 1].Displayed){ // Check whether last row is visible
      //do something
   }
}