取消单元格验证并退出编辑模式

时间:2015-10-09 10:07:50

标签: c# winforms datagridview

我的目标是在DataGridView上建立友好的验证流程。

当用户为某个单元格输入的值不正确时,我想:

  • 退出编辑模式
  • 恢复修改(即从单元格中恢复原始值)
  • 显示错误消息

我目前正在使用CellValidating事件来阻止单元格更新其值,但我无法退出编辑模式。然后该单元格正在等待正确的值,并且不会让用户简单地取消并恢复他的行动......

验证方法如下所示:

private void dataGridViewMsg_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    [...] // Here, treatment determines is the new cell value isValid or not

    if (!isValid)
    {
        MessageBox.Show("The value entered is incorrect.", "Modification aborted");
        e.Cancel = true;
        dataGridViewMsg[e.ColumnIndex, e.RowIndex].IsInEditMode = false; // Someway, what I would like to do
        return;
    }

}

如何让细胞恢复原始值而不需要跟踪此值?

1 个答案:

答案 0 :(得分:5)

您可以使用EndEdit()来获得所需内容。

在任何情况下,请注意最好确保取消仅在预期条件下发生;否则,代码可能会卡在此事件中,因为它会在许多不同的点自动调用。例如,要验证用户通过单元格版本编写的输入,您可以依赖以下方法:

    bool cancelIt = false;

    private void dataGridViewMsg_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
        [...] // Here, treatment determines is the new cell value isValid or not

        if (cancelIt && !isValid)
        {
            MessageBox.Show("The value entered is incorrect.", "Modification aborted");
            e.Cancel = true;
            dataGridViewMsg.EndEdit();
            cancelIt = false;
        }
    }

    //CellBeginEdit event -> the user has edited the cell and the cancellation part 
    //can be executed without any problem
    private void dataGridViewMsg_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
    {
        cancelIt = true;
    }