【问题标题】:How to force datagridviewcell to end edit when row header is clicked单击行标题时如何强制datagridviewcell结束编辑
【发布时间】:2013-01-21 03:03:14
【问题描述】:

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

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

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    这周我遇到了完全相同的问题!看来这是 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;
      }
    }
    

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

    编辑:this question seems to have a similar solution

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 2010-10-05
        相关资源
        最近更新 更多