gpt4 book ai didi

c# - DataGridView 中的单元格验证阻止取消按钮触发

转载 作者:行者123 更新时间:2023-11-30 23:17:11 24 4
gpt4 key购买 nike

我有一个 DataGridView,其中包含几个列,我正在对其进行空验证,如下所示:

dgv.RowValidating += DisallowNulls;

private void DisallowNulls(object sender, DataGridViewCellCancelEventArgs e)
{
if (dgv.Rows[e.RowIndex].Cells[0].Value == DBNull.Value || dgv.Rows[e.RowIndex].Cells[1].Value == DBNull.Value )
{
dgv.Rows[e.RowIndex].ErrorText = "Cells may not be empty";
e.Cancel = true;
}
}

此 DataGridView 作为带有取消按钮的条目表单的一部分存在。如果单击“取消”按钮,我想取消对 DGV 的任何未决编辑,拒绝对其基础数据表的所有更改等。不幸的是,如果用户输入了无效数据或只是部分输入了数据,这似乎会失败以验证失败的任何方式行。取消仅在所有表单数据都有效时才有效,这显然是有问题的。

所以我跳转到取消按钮的代码并尝试绕过验证。我玩过 EndEditCancelEditCausesValidation 等都无济于事,快速追踪后我明白了为什么它们都不起作用 - 验证处理程序使我的代码无法访问。

我的问题是 RowValidating 事件似乎在我的按钮的点击处理程序被触发之前触发,并且 e.Cancel = true 似乎结束了两个处理程序的执行。在任何情况下,单击取消都会触发 dgv.RowValidating 并且根本不会到达 button.Click。我也看不出有什么方法可以从 sender/EventArgs 中辨别出我的按钮点击触发了验证,所以我不确定如何区分......

那么我该如何 a) 在验证之前触发我的按钮代码,或者 b) 确定验证是由按钮点击触发并绕过它?

还是我完全做错了什么?

最佳答案

设置CausesValidation取消 Button 的属性设置为 false 然后调用 CancelEdit DataGridView 在取消按钮的 Click 事件处理程序中的方法:

private void button1_Click(object sender, EventArgs e)
{
this.dataGridView1.CancelEdit();
}

为您的按钮设置 CausesValidation,可防止在您单击按钮时引发验证事件。然后,通过调用 DataGridViewCancelEdit,您可以取消当前编辑单元格的未决更改。

同时将表单的 AutoValidate 属性设置为 EnableAllowFocusChange,让您可以从无效的编辑控件中更改焦点(从而单击取消按钮)。

关于c# - DataGridView 中的单元格验证阻止取消按钮触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41625153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com