如何强制datagridviewcell结束编辑时,行标题单击

本文关键字:标题 单击 编辑 何强制 datagridviewcell 结束 | 更新日期: 2023-09-27 17:55:06

我试图迫使DataGridViewCell退出编辑模式,当用户单击与正在编辑的单元格在同一行中的行头。"editmode"设置为"EditOnEnter"。

所以我写了下面的事件:

private void dGV_common_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    dGV_common.EndEdit();   
} 

上面的代码没有强制单元格结束编辑模式。下面的代码强制单元格退出编辑模式:

    private void dGV_common_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
        dGV_common.EndEdit();   
        dGV_common.CurrentCell = null;
    }

它还取消选择整个行,当用户单击RowHeader时,这不是期望的行为。

所以,我的工作是这样的:

private void dGV_customer_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    dGV_customer.EndEdit();
    dGV_customer.CurrentCell = null;
    dGV_customer.Rows[e.RowIndex].Selected = true;
}

当您选择单行标头时工作良好,但当您尝试通过按住shift选择多个行标头时失败。

我该如何妥善处理这种情况?

如何强制datagridviewcell结束编辑时,行标题单击

这个星期我遇到了完全相同的问题!这似乎是datagridview中一个记录得很好的bug。我不确定它是否在以后的版本中被修复了。当单击网格时检查行标题并更改编辑模式似乎可以工作:

private void dataGridView_MouseClick( object sender, MouseEventArgs e ) {
  DataGridView dgv = (DataGridView)sender;
  if (dgv.HitTest(e.X, e.Y).Type == DataGridViewHitTestType.RowHeader) {
    dgv.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2;
    dgv.EndEdit();
  } else {
    dgv.EditMode = DataGridViewEditMode.EditOnEnter;
  }
}

然而,如果你在整个应用程序中使用许多datagridview,这仍然是一个令人恼火的工作,所以如果你发现一个更好的解决方案,请告诉我。

编辑:这个问题似乎有一个类似的解决方案

我发现了一个禁用editmode的简单方法:

SendKeys.Send("{TAB}");
SendKeys.Send("+{TAB}");

它只是按tab键,然后shift+tab