当用户单击与正在编辑的单元格相同的行中的行标题时,我试图强制DataGridViewCell退出编辑模式。对于记录,editmode设置为EditOnEnter。

因此,我相应地编写了以下事件:

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

上面的代码没有强制单元格结束编辑模式。虽然下面的代码强制单元格退出editmode:
    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选择多个行标题时,该方法将失败。

我该如何正确处理这种情况?

最佳答案

我这周遇到了完全一样的问题!看来,这是datagridview中一个非常有据可查的错误。我不确定在以后的版本中是否已修复。单击网格时检查行标题,并更改editmode似乎可行:

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;
  }
}

但是,如果您在整个应用程序中使用许多datagridviews,这仍然是一件令人烦恼的工作,因此,如果您发现更好的解决方案,请告诉我。

编辑:this question seems to have a similar solution

10-06 11:51