如何滚动,直到它到达底部,然后重置到顶部

本文关键字:底部 然后 顶部 何滚动 滚动 | 更新日期: 2023-09-27 18:17:36

使用Winforms,我有一个Datagridview由我的数据库中的数据填充。我每5秒刷新一次datagridview,以反映数据库中所做的任何更改。

我想知道如何在每次刷新datagridview时向下滚动一点,直到它到达底部。当它到达底部时,我想将滚动条重置到顶部。

目前我有这个代码:

if(scrollPosition < dataGridView1.RowCount - 1 - 5)
{
    scrollPosition+=5;
}
else
{
    // the scroll value has already exceeded, reset to 0
    scrollPosition = 0;
}
dataGridView1.FirstDisplayedScrollingRowIndex = scrollPosition;
我的scrollPosition的默认值是0顺便说一下

它可以正常向下滚动,但似乎没有复位到顶部。它不经过第二个if语句。我知道我在这里漏掉了一些逻辑。我做错了什么?

更新:让它与黄大的答案一起工作,并且也更新了我上面的当前代码,但它仍然看起来有bug。有时它已经到达底部,但它不会滚动回顶部。有时我需要等待大约1到5"+=5"的增量,然后它会滚动到顶部,也就是触发else语句。

我想问一个后续问题。正在使用dataGridView1。在这种情况下,RowCount真的是可行的吗?或者有更好的东西可以用来比较我的scrollPosition吗?

如何滚动,直到它到达底部,然后重置到顶部

有一个非常明显的问题:如果scrollPosition超过dataGridView.RowCount, scrollPosition == dataGridView1.RowCount可能不正确,因为它每次增长5。

可能的修复方法是将"=="改为">=",即:

if(scrollPosition >= dataGridView1.RowCount)
{
    //do your stuff
}

据我所知,你不能得到实际的DGV滚动条最小/最大,因此你不能设置它。

如果黄大建议是ok的,那么当你的表单加载得到 FirstDisplayedScrollingRowIndex 值,当你想重置它回到顶部 dataGridView1.FirstDisplayedScrollingRowIndex = value

编辑或者直接设置dataGridView1.FirstDisplayedScrollingRowIndex = 0