0

我正在使用带有 LINQ2SQL 的 XtraGrid 作为数据源,但遇到了一些问题。

有时在数据库中发布更改时会发生数据验证错误(例如,在唯一索引违规或触发错误或 FK 不存在或您尝试删除某人的父级等情况下)。在这种情况下,我需要通知用户并让他能够更正数据或恢复行。

不幸的是,我无法找到放置代码并使其成为可能的最佳位置。在GridView.ValidateRow事件主体内部,尚未更改任何基础数据(dataContext.SubmitChanges()调用不会引起任何更改)。

GridView.RowUpdated事件看起来是保存对 DB 的更改的好地方,但我无法保持错误行的焦点(如果用户通过将焦点移动到另一行来导致行更新,那么在此事件处理程序完成后焦点将消失)。

在 GridView 中插入/更新/删除操作时处理数据库错误的常见解决方案是什么?

4

1 回答 1

0

请执行下列操作:

  • 处理 View RowUpdated 事件;

  • 将 SubmitChanges 调用包装在 try/catch 块中;

  • 如果抛出任何异常,请相应地更新视图状态。

使用以下伪代码:

using DevExpress.XtraGrid.Views.Base;

void SomeViewHere_RowUpdated(object sender, RowObjectEventArgs e) {
  try {
  ...
    d.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
  }

  catch (Exception ex) {
  ...
    BeginInvoke(new Action(() => {
    //Handle GridControl.NewItemRowHandle State
    //Or
    //Maintain User Changes
    }));
  }
}
于 2013-11-07T16:49:23.283 回答