2013-10-31 54 views
0

我使用XtraGrid和LINQ2SQL作爲數據源,我遇到了一些問題。XtraGrid + LINQ2SQL,處理數據庫錯誤

有時數據驗證錯誤發生在發佈數據庫中的更改(例如,如果存在唯一索引違規或觸發錯誤或FK目標存在或者您嘗試刪除某人的父級等)。在這種情況下,我需要通知用戶並使他能夠糾正數據或恢復行。

不幸的是,我無法找到放置代碼並使其成爲可能的最佳位置。 Inside GridView.ValidateRow事件主體沒有底層數據已被更改(並且沒有更改將由dataContext.SubmitChanges()調用引起)。

GridView.RowUpdated事件看起來像是保存對數據庫更改的好地方,但我無法保持錯誤行的焦點(如果用戶通過將焦點移動到另一行來引起行更新,則焦點將在此事件後消失處理程序完成)。

在GridView中插入/更新/刪除操作時處理數據庫錯誤的常見解決方案是什麼?

回答

0

執行以下操作:

  • 處理視圖RowUpdated事件;

  • 在try/catch塊中包裝SubmitChanges調用;

  • 如果發生任何異常,請相應地更新視圖狀態。

使用下面的僞代碼:

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 
    })); 
    } 
} 
+0

有沒有嘗試過,但馬克會給你100反正當你沿着這裏是:)米哈伊爾,爲什麼使用BeginInvoke的,不只是直接調用東西? – LINQ2Vodka