问题描述
我正在以编程方式修改DGV单元的值。由于某些原因,这将清除DGV的SelectedRows属性。这是我的代码:
1: public static void WriteDGVCellValueByRowAndCol<T>(DataGridView dgv,int row,int column,T newValue)
2: {
3: dgv.Rows[row].Cells[column].Value = newValue;
4: }
我想似乎很简单。不幸的是,当我使用断点和调试器进行跟踪时,会发生以下情况:
DGV本身保持不变,并且单元格值正在更新,但是SelectedRows属性正在清空,因此其Count为0。为什么会发生这种情况,我该怎么做才能防止它发生?
这似乎是在还通过编程方式从另一种形式更改所选行之后出现的。例如,如果我设置了当前的Rows[n].Selected = false;
,然后又设置了Rows[n+1].Selected = true;
,则上述功能将以上述方式失败。但是,如果我不先执行此选择修改,则不会发生任何错误(SelectedRows属性保持不变)。
在此期间,我通过对函数的以下更新成功解决了此问题,但似乎没有必要,因此,我希望能帮助您找出导致这种奇怪效果的原因。
1: // Workaround
2: public static void WriteDGVCellValueByRowAndCol<T>(DataGridView dgv,T newValue)
3: {
4: dgv.Rows[row].Cells[column].Value = newValue;
5: dev.Rows[row].Selected = true;
6: }
private void SelectNext()
{
int currentIndex = myDGV.SelectedRows[0].Index;
int newIndex = currentIndex;
if (currentIndex == myDGV.RowCount - 1)
{
Log("The last row was already selected. Wrapping to the first row.");
newIndex = 0;
}
else newIndex++;
myDGV.Rows[currentIndex].Selected = false;
myDGV.Rows[newIndex].Selected = true;
}
此功能正在使用Func<...>
传递给另一种形式,并且可以正常工作,除了这种SelectedRows
副作用之外。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)