gpt4 book ai didi

c# - DataGridView DataError 事件保留无效行

转载 作者:太空狗 更新时间:2023-10-29 22:33:14 25 4
gpt4 key购买 nike

我正在开发一个显示 DataGridView 的 Winforms 应用程序,绑定(bind)到某个数据库表。

它允许向其中插入新条目,并进行一些数据验证。

当必填列留空,或违反了唯一约束之一时,DataError 事件调用此函数:

protected void _data_error(object sender, DataGridViewDataErrorEventArgs e)
{
MessageBox.Show(this,e.Exception.Message,"Error");
e.ThrowException = false;
e.Cancel = false;
}

当弹出窗口关闭时,正在编辑的新行将被删除。
当对已保存的行执行此操作(更新操作)时,该行将失去其更改并失去焦点。我认为这意味着我需要向应用程序发出信号以保持该行可编辑,但我不知道该怎么做。

自相矛盾的是,如果我用 throw(e.Exception) 替换事件处理程序,异常就会被抛到一边,并被未捕获的异常处理程序拾取,但新行在之后被保留该窗口关闭。

如何在 DataError 事件中保留新行?

编辑:

我的下一个想法是保存该行,并在 MessageBox 弹出后将其添加到 DataGridView 的数据源中。这不起作用,因为将数据添加到数据源会将其添加为 committed 行,这会由于无效数据而抛出异常,而不是将数据保留为 可编辑 行,以便验证不会发生。

最佳答案

我花了几天时间,但这是我修复它的方法,但我仍然对更好的方法持开放态度。

DataGridView.RowValidating事件,验证每个单元格的内容。如果无效,请执行以下操作:

Grid.Rows[e.RowIndex].ErrorText = "Concisely describe the error and how to fix it";
e.Cancel = true;

并确保在下一次行程中通过事件处理程序清除错误文本。

对于用户输入无效类型数据的情况,例如,将文本输入纯数字列,您将必须处理 DataGridView.DataError 中的错误。事件。使用相同的代码:

Grid.Rows[e.RowIndex].ErrorText...

但不需要清除 ErrorText,因为您的行验证事件会处理它。

注意:这不会让您有弹出窗口来通知用户出了什么问题,它会使用 DataGridView 错误,这是网格左侧的红色感叹号鼠标悬停文本显示您填写的错误文本。每当您有一个 MessageBox 弹出窗口时,您就会失去对可编辑数据的关注并丢失该行。

关于c# - DataGridView DataError 事件保留无效行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495900/

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