【问题标题】:DataGridView UserDeletingRow Not FiringDataGridView UserDeletingRow 未触发
【发布时间】: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


    【解决方案1】:

    很遗憾我还不能发表评论(因为代表的东西等等!) 你也不清楚你到底想做什么。

    单击行的 RowHeader 会导致整行被选中,然后按 Del 按钮,该行将被删除并触发事件!

    如果您希望能够在不选择行标题的情况下删除行,请考虑使用“全行选择”而不是“行标题选择”。

    【讨论】:

    • 单击 RowHeader 会选择整行,但会将第一个单元格置于编辑模式。这就是为什么按 DEL 会删除单元格内容并且不会触发 UserDeletingRow 事件。
    • 好吧,我现在试过了,它没有将我的第一个单元格置于编辑模式,我可以轻松删除该行。想知道你提到的那种行为是否有属性......
    • 当 EditMode 设置为 EditOnEnter 时,单击 RowHeader 会将第一个单元格置于编辑状态。这就是 DEL 不触发 UserDeletingRow 事件的原因。
    • 试试这个:在 DataGridView 的“RowHeaderMouseClick”上调用 this.Validate() 并尝试按 DEL 删除行。 “EditOnEnter”实际上并没有将第一个单元格置于编辑模式。它将最后编辑的单元格置于 IMO 编辑模式。
    【解决方案2】:

    我在http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/cab3c9eb-4c86-475e-8cbd-dee6b235765a 找到了答案。当单击 RowHeader 然后将其更改回 EditOnEnter 时,将 EditMode 更改为 EditOnEnter 以外的模式是一种解决方法。

    我要感谢@M2X,因为他的评论很有帮助。

    【讨论】:

    • 很高兴你想通了,我能帮上忙;-]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多