Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许用户在C#WinForms DataGridView中取消添加条目_C#_Winforms_Validation_Datagridview - Fatal编程技术网

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

允许用户在C#WinForms DataGridView中取消添加条目,c#,winforms,validation,datagridview,C#,Winforms,Validation,Datagridview,我已决定在我的C#WinForms应用程序中使用DataGridView就地编辑。我想让用户添加一个新行,当他离开时,将该行存储在数据库中。在目前的情况下,只有一列。此外,每个条目都应该是唯一的 如果他在其中输入了一些唯一的值,那么该行将得到验证,并且所有操作都很好。如果他输入了重复的值,在行验证事件中,我将设置e.Cancel=true,并显示错误消息框 问题是,如果他开始添加,但后来改变了主意,不想再添加了,那么除了关闭表单之外,他没有办法取消它 我尝试将其添加到行验证事件中,但它不允许单击

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

如果他在其中输入了一些唯一的值,那么该行将得到验证,并且所有操作都很好。如果他输入了重复的值,在
行验证
事件中,我将设置
e.Cancel=true
,并显示错误
消息框

问题是,如果他开始添加,但后来改变了主意,不想再添加了,那么除了关闭表单之外,他没有办法取消它

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

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
事件中执行此操作,但它产生了一个
操作,无法在此事件处理程序中执行。
异常:

dgv_Industries.Rows.RemoveAt(e.RowIndex);

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

您使用什么作为数据源?由于WinForms中数据绑定DataGridView的不足,它不绑定任何内容。数据是通过编程方式从MySQL数据库中提取的。我相信按esc键会自动删除行。事实上,您是正确的。需要注意的是,我覆盖了OnUserDeletingRow事件,该事件在按下Esc键时被触发,这隐藏了我正在寻找的功能。请将此作为答案发布,以便我可以奖励它。谢谢