我正在开发一个显示绑定到某个数据库表的 DataGridView 的 Winforms 应用程序。
它允许在其中插入新条目,并进行一些数据验证。
当必填列留空或违反其中一个唯一约束时,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 的数据源中。这不起作用,因为将数据添加到数据源会将其添加为已提交的行,这会因为无效数据而引发异常,而不是将数据保留为可编辑行,这样就不会发生验证。