使用SelectionMode = RowHeaderSelect考虑2个DataGridView。在grid1中我有2列; TextBox和CheckBox。在grid2中我有2列;一个ComboBox和一个TextBox。
当我点击RowHeader时,焦点转到第一个单元格,而不是RowHeaderCell。当我按DEL按钮时,单元格的内容被删除(TextBox内容被清除,ComboBox被设置为第1项)。
这样,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事件。作为一种解决方法,我选择一个无法进入编辑模式的单元格(如果可用),例如CheckBoxColumn。
这是单击RowHeader的默认行为吗?如果是的话,你能告诉我一个解决方法吗?如果没有,你可以指出我这种行为的原因吗?
编辑2:
我发现将EditMode设置为EditOnEnter使得单击RowHeader将第一个单元格置于编辑模式。我会尽力克服这一点,但感谢任何帮助。
答案 0 :(得分:2)
遗憾的是我还不能发表评论(因为代表的东西等等!) 你也不清楚你想要做什么。
单击行的RowHeader会导致整行被选中,按Del键删除行并触发事件!
如果您希望能够在不选择行标题的情况下删除行,请考虑使用“完整行选择”而不是“行标题选择”。
答案 1 :(得分:1)
我在http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/cab3c9eb-4c86-475e-8cbd-dee6b235765a找到了答案。当单击RowHeader然后将其更改回EditOnEnter时,可以将EditMode更改为EditOnEnter以外的模式。
我要感谢@ M2X,因为他的评论很有帮助。