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

时间:2014-10-22 17:00:29

标签: c# datagridview scroll

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

我正在探索Scroll事件,但没有成功。

感谢。

3 个答案:

答案 0 :(得分:4)

这应该让你关闭...将它放在你的Scroll事件中它会告诉你最后一行何时可见:

  int totalHeight = 0;
  foreach (DataGridViewRow row in dataGridView1.Rows)
    totalHeight += row.Height;

  if (totalHeight - dataGridView1.Height < dataGridView1.VerticalScrollingOffset)
  {
    //Last row visible
  }

答案 1 :(得分:1)

这是另一种方式...

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

答案 2 :(得分:0)

这是另一种解决方案:

滚动事件在每次移动滚动条时运行。根据您的使用情况,这可能会导致issues的性能下降。因此,更好的方法是仅在用户通过处理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
   }
}