我决定在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
中的空行(除了标准的空添加行),如下所示,这不仅看起来不对,它还会使我的功能崩溃(除非我实施了更多检查。)
然后我尝试在RowValidated
事件中执行此操作,但它产生了Operation cannot be performed in this event handler.
例外:
dgv_Industries.Rows.RemoveAt(e.RowIndex);
允许用户取消添加新行的正确方法是什么,同时删除它创建的行?