代码之家  ›  专栏  ›  技术社区  ›  sh_kamalh

DataGridView用户删除行未激发

  •  1
  • sh_kamalh  · 技术社区  · 14 年前

    考虑两个具有selectionMode=rowHeaderSelect的DataGridView。在网格1中,我有两列;一个文本框和一个复选框。在Grid2中,我有两列;一个组合框和一个文本框。

    当我单击行标题时,焦点转到第一个单元格,而不是行标题单元格。当我按下del按钮时,单元格的内容被删除(文本框内容被清除,组合框设置为第一项)。

    这样,UserDeletingRow事件就永远不会触发,因为DataGridView常见问题解答说:“只有当当前单元格不处于编辑模式时,用户才能删除行,allowUserTodeleterRows属性设置为true”。

    作为解决方法,我在rowheadermouseclick中实现了此代码

    grid.CurrentCell = grid.Rows[rowIndex].Cells[columnName];
    grid.Rows[rowIndex].Selected = true;
    

    在grid1的情况下,我传递复选框列的名称,当我按下del时,将激发userdeletingrow事件。但是,对于传递组合框列名称的Grid2,不会激发事件。

    我尝试了以下方法:
    1-选择行标题单元格->异常,因为无法选择它。
    2-grid.endedit()->无效。
    3-将selectionmode更改为fullrowselect,然后返回rowheaderselect->单元格设置为编辑模式。

    我的问题:
    我需要用户删除行来启动,而不管网格的列是什么?如果可能的话,还是选择一个解决方案来选择HeaderCell?

    编辑(问题的简短形式):
    单击行标题可选择行并将第一个单元格置于编辑模式(如果适用),这样单击“删除”按钮可删除单元格内容,而不会触发“用户删除行”事件。作为解决方法,我选择了一个不能置于编辑模式的单元格(如果可用),例如checkboxcolumn。

    这是单击行标题的默认行为吗?如果是,你能给我看一个解决方法吗?如果没有,你能告诉我造成这种行为的原因吗?

    编辑2:
    我发现,将edit mode设置为editonenter会使单击rowheader将第一个单元格置于编辑模式。我会努力克服这一点,但任何帮助都会得到感激。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Maghoumi    14 年前

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

    单击行的行标题将选中整行,然后按Del按钮将删除该行,并触发事件!

    如果要在不选择行标题的情况下删除行,请考虑使用“整行选择”而不是“行标题选择”。

        2
  •  1
  •   sh_kamalh    14 年前

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

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