winforms - 当我设置单元格值时,WinForms DataGridView 清除 SelectedRows?
问题描述
我正在以编程方式修改 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: }
看起来很简单,我想。不幸的是,当我使用断点和调试器进行跟踪时,会发生这种情况:
- 在第 3 行执行之前,调试器显示 dgv.SelectedRows.Count == 1
- 第 3 行执行后,调试器显示 dgv.SelectedRows.Count == 0
DGV 本身保持不变,并且单元格值正在更新,但 SelectedRows 属性被清空,因此其 Count 为 0。为什么会发生这种情况,我可以做些什么来防止它发生?
编辑
这似乎仅在以编程方式从另一个表单更改所选行之后才会发生。例如,如果我设置 currentRows[n].Selected = false;
然后 set Rows[n+1].Selected = true;
,则上述功能会以所述方式失败。但是,如果我不先执行此选择修改,则不会发生错误(SelectedRows 属性保持不变)。
与此同时,我正在通过对函数的以下更新成功地解决了这个问题,但似乎没有必要,所以我很想知道是什么导致了这种奇怪的效果。
1: // Workaround
2: public static void WriteDGVCellValueByRowAndCol<T>(DataGridView dgv, int row, int column, 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
副作用之外,这个函数正在被传递给另一个表单,并且按预期工作。
解决方案
推荐阅读
- python - 以 Python 方式使 geopy.Point 更具可读性
- node.js - 使用 flowtype 键入方案
- android - 为什么我收到 403 Forbidden Request 错误?
- php - PHP 无法在 Ubuntu 中访问挂载的驱动器
- android - 当数据随时间变化时,如何获取数据?
- python - 如何在每个组保持一个值不变的同时遍历多个组?
- syntax - Isabelle:我怎样才能在 mixfix 表示法中定位固定参数?
- javascript - 单击列表项以从 JSON 文件中获取相关信息,以使用正确的数据更新 HTML
- bitmap - Android保存多张图片
- react-native - 手动使用 ApolloClient.query() onClick 时如何访问 subscribeToMore