允许用户取消在C#WinForms DataGridView中添加条目

时间:2014-09-14 13:26:34

标签: c# winforms validation datagridview

我决定在DataGridView C#应用中使用WinForms就地编辑功能。我想让用户添加一个新行,当他离开时,将该行存储在数据库中。在目前的情况下,只有一列。此外,每个条目都应该是唯一的。

如果他在那里输入了一些独特的值,那么该行会得到验证并且一切正常。如果他输入重复值,则在RowValidating事件中我会设置e.Cancel = true并显示错误MessageBox

问题在于,如果他开始添加,但随后改变主意并且不想再添加,除了关闭表单之外,他无法取消它。

我尝试将其添加到RowValidating事件中,但它不允许点击当前行以外的任何其他位置:

if (dgv_Industries[e.ColumnIndex, e.RowIndex].Value == null || string.IsNullOrEmpty(dgv_Industries[e.ColumnIndex, e.RowIndex].Value.ToString()))
{
    e.Cancel = true;
    return;
}

如果我没有设置e.Cancel = true,只设置return,则会继续触发RowValidated事件。我可以在这里中止数据库操作,但我会被DataGridView中的空行(除了标准的空添加行),如下所示,这不仅看起来不对,它还会使我的功能崩溃(除非我实施了更多检查。)

Empty row example

然后我尝试在RowValidated事件中执行此操作,但它产生了Operation cannot be performed in this event handler.例外:

dgv_Industries.Rows.RemoveAt(e.RowIndex);

允许用户取消添加新行的正确方法是什么,同时删除它创建的行?

0 个答案:

没有答案