为什么没有触发DataGridView的CellEndEdit事件

时间:2013-11-28 13:49:48

标签: c# winforms

全部,我知道我们可以为DataGridView设置一个可编辑的列。 完成编辑单元格后。 CellEndEdit事件将被触发。 但我只是想知道当我点击DataGridView的空白区域时为什么没有结束单元格的编辑。然后点击DataGridView之外的区域也不会触发它。只有点击其他单元格才能实现。这真的没有意义。谁知道为什么?以及如何制作它?它尝试使用DataGridView的Click事件,但是当我单击该单元格时,它还会触发DataGridView_click事件。

    private void dgvList_Click(object sender, EventArgs e)
    {

        dgvFileList.EndEdit();

    }

enter image description here

3 个答案:

答案 0 :(得分:3)

尝试在网格的MouseDown事件中使用HitTest函数:

void dgvFileList_MouseDown(object sender, MouseEventArgs e) {
  DataGridView.HitTestInfo hit = dgvFileList.HitTest(e.X, e.Y);
  if (hit.RowIndex < 0 | hit.ColumnIndex < 0) {
    dgvFileList.EndEdit();
  }
}

单击DataGridView控件外部将需要命中一个可聚焦控件。

答案 1 :(得分:0)

BeginEdit之前。设置变量以确定当前状态是否为编辑模式。

bBeginEdit = true;
dgvFileList.BeginEdit(false);

在Form_Click事件中

        if (bBeginEdit)
        {
            dgvFileList.EndEdit();
            bBeginEdit = false;
        }

谢谢,

答案 2 :(得分:0)

CellEndEdit()仅在单元格处于编辑模式时才触发事件(请参阅Joe.wang的响应)。您可以简单地在CellEndEdit()和CellBeginEdit()之前进入编辑模式(来自CellContentClick-handler的代码,PickNewFont()是FontDialog的包装):

[...]
else if (String.Compare(rowName, "Font name") == 0)    // user clicks on Font-row
{
    dgvConfigSettings.BeginEdit(true);
    Font newFont = PickNewFont(fontName, fontSize, fontStyle);
    dgvConfigSettings.CurrentCell.Tag = newFont;    // a bit dirty.... but that way we can pick-up the font in the panel-handler more easily
    dgvConfigSettings.CurrentCell.Value = newFont.Name.ToString();
    dgvConfigSettings.EndEdit();
}