Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何滚动到底部,然后重置为顶部?_C#_Winforms_Datagridview - Fatal编程技术网

C# 如何滚动到底部,然后重置为顶部?

C# 如何滚动到底部,然后重置为顶部?,c#,winforms,datagridview,C#,Winforms,Datagridview,使用Winforms,我有一个Datagridview,由数据库中的数据填充。我每5秒刷新一次datagridview,以反映数据库中所做的任何更改 我想知道如何在每次刷新datagridview时向下滚动一点,直到它到达底部。当它到达底部时,我想将滚动条重置回顶部 目前我有以下代码: if(scrollPosition < dataGridView1.RowCount - 1 - 5) { scrollPosition+=5; } else { // the scrol

使用
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;
if(滚动位置
顺便说一下,我的scrollPosition的默认值是0

它会正确向下滚动,但似乎不会重置回顶部。它没有通过我的第二个if语句。我知道我只是缺少一些逻辑。我做错了什么

更新:得到了与黄达的答案,并更新了我目前的代码上面,但它似乎仍然有缺陷。有时它已经到达底部,但不会滚动回顶部。我有时需要再等待大约1到5“+=5”的增量,然后它将滚动到顶部并触发else语句


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

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

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

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

据我所知,您无法获得实际的dgv滚动条最小/最大值,因此您无法设置它

如果huangda的建议是正确的,那么当您的表单加载时,将获得
第一次显示的ScrollingRowIndex
值,并且当您希望将其重置回顶部
dataGridView1.FirstDisplayedScrollingRowIndex=值时

编辑 或者只需设置
dataGridView1.FirstDisplayedScrollingRowIndex=0