无法将值设置为 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;
以上代码在 DataGridView
的 CellValidating
事件中。
单步执行上面的代码:
currentRowIndex
第一行执行后的值为12
ResetBindings
被执行,导致 FirstDisplayedScrollingRowIndex
保持 3 的值
FirstDisplayedScrollingRowIndex
在最后一行执行后未设置为 12
我不确定值 3 的来源,但我知道它在调用 ResetBindings
后以某种方式在后台应用。
谁能帮我理解为什么我在调用 ResetBindings
后无法修改 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;
我希望这对像我一样被困在这个问题上的任何人有所帮助。祝你好运。
我试图在调用 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;
以上代码在 DataGridView
的 CellValidating
事件中。
单步执行上面的代码:
currentRowIndex
第一行执行后的值为12ResetBindings
被执行,导致FirstDisplayedScrollingRowIndex
保持 3 的值
FirstDisplayedScrollingRowIndex
在最后一行执行后未设置为 12
我不确定值 3 的来源,但我知道它在调用 ResetBindings
后以某种方式在后台应用。
谁能帮我理解为什么我在调用 ResetBindings
后无法修改 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;
我希望这对像我一样被困在这个问题上的任何人有所帮助。祝你好运。