【问题标题】:XtraGrid + LINQ2SQL, handling database errorsXtraGrid + LINQ2SQL,处理数据库错误
【发布时间】:2013-10-31 00:40:32
【问题描述】:

我使用 XtraGrid 和 LINQ2SQL 作为数据源,但遇到了一些问题。

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

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

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

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

【问题讨论】:

    标签: gridview devexpress xtragrid


    【解决方案1】:

    执行以下操作:

    • 处理 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
        }));
      }
    }
    

    【讨论】:

    • 还没有尝试过,但无论如何,mark 会给你 100,因为你在这里 :) Mikhail,为什么要使用 BeginInvoke,而不是直接调用?
    猜你喜欢
    • 1970-01-01
    • 2016-04-11
    • 2018-04-18
    • 2017-09-13
    • 2014-12-05
    • 2019-10-16
    • 2011-04-30
    • 2012-04-13
    • 2011-11-03
    相关资源
    最近更新 更多