9

当用户单击与正在编辑的单元格位于同一行的行标题时,我试图强制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 来选择多个行标题时会失败。

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

4

2 回答 2

6

这周我遇到了完全相同的问题!看来这是 datagridview 中一个有据可查的错误。我不确定它是否已在任何更高版本中得到修复。单击网格时检查行标题并更改编辑模式似乎可行:

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

但是,如果您在整个应用程序中使用许多数据网格视图,这仍然是一项令人讨厌的工作,所以如果您发现更好的解决方案,请告诉我。

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

于 2013-01-24T10:18:56.207 回答
0

我找到了一个简单的方法来禁用编辑模式:

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

它只需按 Tab,然后按 shift+tab

于 2019-05-16T09:08:24.573 回答