2011-10-13 91 views
1

我有一個綁定到實體的綁定源。如何檢測綁定到實體的綁定源的更改?

normBindingSource.DataSource = 
dowacodbEntities.norms.OrderBy(o1 => o1.UsePurpose_id).ThenBy(o2 => o2.Quantity); 

然後在datagridview中顯示綁定源。如果我使用數據集,我可以調用HasChanges()方法來檢查用戶是否進行了更改。此外,我發現context.ObjectStateManager.GetObjectStateEntries(...)似乎是我正在尋找,但我不知道如何使用它。

我的目的是當用戶離開表單時,會出現一個消息框顯示:「有一些變化,你想在退出之前保存它嗎?」

回答

0

這是迄今爲止最好的方法:

bool changesMade = context. 
        ObjectStateManager. 
        GetObjectStateEntries(EntityState.Added | 
             EntityState.Deleted | 
             EntityState.Modified 
             ).Any(); 
1

試試這個。我也遇到過這種情況。

創建一個類來檢查修改。

//define first your datacontext 
List<dowaCodbEntities> dowacodbEntities; 

private bool CheckForModifications() 
    { 
    List<dowaCodbEntities> dowaCodbEntitiesCopy = normBindingSource.DataSource.Cast<dowaCodbEntities>().ToList(); 
    if(dowacodbEntities.Count != dowaCodbEntitiesCopy.Count) 
     return true; 
    } 

只要在需要的時候調用該函數,主要是在關閉時調用該函數。然後,如果它返回true,請先停止關閉並詢問是否要進行更改。需要幫助請叫我。

+0

彌敦道,它返回true,當用戶只修改行(無插入和沒有刪除)? – JatSing

+0

不適用於插入和刪除。現在你的程序是否允許修改行?那麼這將是另一個解決方案。 – Nathan