无法将值设置为 FirstDisplayedScrollingRowIndex

Cannot Set Value To FirstDisplayedScrollingRowIndex

我试图在调用 ResetBindings 后阻止 DataGridView 滚动。

我在更新绑定到它的列表中的值后调用 ResetBindings

调用ResetBindings后,我无法为FirstDisplayedScrollingRowIndex赋值。

请注意没有抛出异常。

这是我正在使用的代码:

int currentRowIndex = dgvStuff.FirstDisplayedScrollingRowIndex;

dgvStuff.CellEnter -= dgvStuff_CellEnter;
dgvStuff.Scroll -= dgvStuff_Scroll;
bindingSource.ResetBindings(false); // FirstDisplayedScrollingRowIndex value gets modified after this call;
dgvStuff.Scroll += dgvStuff_Scroll;
dgvStuff.CellEnter += dgvStuff_CellEnter;

dgvStuff.FirstDisplayedScrollingRowIndex = currentRowIndex; // This value is not being set;

以上代码在 DataGridViewCellValidating 事件中。

单步执行上面的代码:

我不确定值 3 的来源,但我知道它在调用 ResetBindings 后以某种方式在后台应用。

谁能帮我理解为什么我在调用 ResetBindings 后无法修改 FirstDisplayedScrollingRowIndex 的值?

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.firstdisplayedscrollingrowindex

您需要做的就是更改 DataGridView 中的 CurrentCell 然后您应该能够将值设置为 FirstDisplayedScrollingRowIndex.

我知道这是一个奇怪的修复,但它对我有用:

int rowIndex = dgvStuff.CurrentCell.RowIndex;
int columnIndex = dgvStuff.CurrentCell.ColumnIndex;
int currentRowIndex = dgvStuff.FirstDisplayedScrollingRowIndex;

dgvStuff.CellEnter -= dgvStuff_CellEnter;
dgvStuff.Scroll -= dgvStuff_Scroll;
bindingSource.ResetBindings(false);

if (dgvStuff.RowCount > 0)
{
    dgvStuff.CurrentCell = dgvLEDs[0, 0]; // This line alone fixes the issue;
    dgvStuff.CurrentCell = dgvLEDs[columnIndex, rowIndex]; // I added this line because I needed to specify the current cell;
}

dgvStuff.FirstDisplayedScrollingRowIndex = currentRowIndex; // This value is NOW being set;

dgvStuff.Scroll += dgvStuff_Scroll;
dgvStuff.CellEnter += dgvStuff_CellEnter;

我希望这对像我一样被困在这个问题上的任何人有所帮助。祝你好运。