【发布时间】:2010-10-31 14:40:07
【问题描述】:
考虑使用 SelectionMode = RowHeaderSelect 的 2 个 DataGridView。在 grid1 我有 2 列;一个文本框和一个复选框。在 grid2 我有 2 列;一个组合框和一个文本框。
当我单击 RowHeader 时,焦点转到第一个单元格,而不是 RowHeaderCell。当我按下 DEL 按钮时,单元格的内容被删除(TextBox 内容被清除并且 ComboBox 设置为第一项)。
这样,UserDeletingRow 事件永远不会触发,因为 DataGridView 常见问题解答说“用户只能在当前单元格未处于编辑模式时删除行,AllowUserToDeleteRows 属性设置为 true”。
作为一种解决方法,我在 RowHeaderMouseClick 中实现了此代码
grid.CurrentCell = grid.Rows[rowIndex].Cells[columnName];
grid.Rows[rowIndex].Selected = true;
在 grid1 的情况下,我传递 CheckBox 列的名称,当我按下 DEL 时会触发 UserDeletingRow 事件。但是对于 grid2,传递 ComboBox 列的名称不会触发事件。
我尝试了以下方法:
1- 选择 RowHeaderCell -> 例外,因为它不能被选择。
2- grid.EndEdit() -> 没有效果。
3- 将 SelectionMode 更改为 FullRowSelect 然后回到 RowHeaderSelect -> 单元格设置为编辑模式。
我的问题:
无论网格的列如何,我都需要触发 UserDeletingRow 吗?或者如果可能的话选择 HeaderCell 的解决方法?
编辑(问题的简短形式):
单击 RowHeader 选择行并将第一个单元格置于编辑模式(如果适用),这样单击 DEL 按钮将删除单元格内容并且不会触发 UserDeletingRow 事件。作为一种解决方法,我选择一个不能进入编辑模式的单元格(如果可用),例如复选框列。
这是单击 RowHeader 的默认行为吗?如果是的话,你能告诉我一个解决方法吗?如果没有,你能指出这种行为的原因吗?
编辑 2:
我发现将 EditMode 设置为 EditOnEnter 会使单击 RowHeader 将第一个单元格置于编辑模式。我会努力克服这个问题,但我们不胜感激。
【问题讨论】:
标签: c# .net winforms datagridview