Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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# 当属性更改时,DataGridView控件滚动到顶部_C#_Datagridview - Fatal编程技术网

C# 当属性更改时,DataGridView控件滚动到顶部

C# 当属性更改时,DataGridView控件滚动到顶部,c#,datagridview,C#,Datagridview,在Windows窗体上,我有一个DataGridView控件,其中包含由数据源(数据绑定)填充的记录。每个记录表示一个数据对象 并非所有的行都在显示:例如,仅显示前10行。因此,用户可以向下滚动查看其他记录。这没什么特别的 但是,当用户在滚动后单击一行时,该行对象的数据属性正在更改,这将刷新DataGridView和-它“滚动”到datagrid的顶部(可能整个DataGridView正在刷新)。这是不可取的 如何在记录更新期间保持当前滚动位置?您可以使用DataGridView的属性 它获取/

在Windows窗体上,我有一个
DataGridView
控件,其中包含由数据源(数据绑定)填充的记录。每个记录表示一个数据对象

并非所有的行都在显示:例如,仅显示前10行。因此,用户可以向下滚动查看其他记录。这没什么特别的

但是,当用户在滚动后单击一行时,该行对象的数据属性正在更改,这将刷新
DataGridView和
-它“滚动”到datagrid的顶部(可能整个
DataGridView
正在刷新)。这是不可取的


如何在记录更新期间保持当前滚动位置?

您可以使用DataGridView的属性

它获取/设置DGV上显示的第一行的索引

像这样使用它:

        int rowIndex = dataGridView.FirstDisplayedScrollingRowIndex;

        // Refresh your DGV.

        dataGridView.FirstDisplayedScrollingRowIndex = rowIndex;

当然,如果对DGV进行排序或添加/删除行(您确实说过您正在更新,所以可能还可以),这将不太合适。

我也遇到了同样的问题。我发现是在我的数据源上调用AcceptChanges()完成的,所以我通过在调用之前保存FirstDisplayedScrollingRowIndex的值并在调用之后恢复来修复它。我遇到了完全相同的问题,但是,我对Jay的上述建议放在哪里有点困惑。我已经在好几个地方试过了,似乎没有什么不同。我还尝试在数据源设置为DataGridView之前和之后对AcceptChanges()进行调用,但这似乎没有任何作用。使用此解决方案,我必须检查gridview的
行数
是否高于0,然后将其设置为
行索引
,否则我会遇到超出范围的异常,即使检查条件并进行补偿,它们仍然会出现,直到我意识到如果没有行,我可以让gridview自行处理并滚动到顶部。这对我不起作用