2010-10-04 185 views
0

我在Silverlight 4中使用DataForm。實際上有幾個DataForms,它們共享一個通用的RIA Services上下文。下面是我遇到的問題...如何以編程方式檢測DataForm是否處於編輯模式

如果我開始在數據形的一個編輯數據字段,然後點擊)按鈕調用Context.SubmitChanges(,我得到以下錯誤:

�Entity 'foo' is currently being edited and has uncommitted changes. 
    A call to BeginEdit must be followed by a call to EndEdit or CancelEdit 
    before changes can be submitted.� 

請注意,「提交更改」按鈕位於DataForms的外部,並且適用於DataForms之間共享的RIA Services上下文(它們各自位於選項卡控件的單獨選項卡中)。

我想通過在代碼中檢測DataForm何時處於編輯模式來避免此問題。當我處於調試模式時,可以看到DataForm的屬性如IsEditingCanCancelEdit表明它處於編輯模式,但這些屬性似乎無法在我的代碼中使用。

任何想法?

回答

0

因爲沒有可用的屬性提供了我需要的信息,所以我最終創建了一個名爲_isEditing的私有字段(在UserControl中包含DataForm),該字段被初始化爲「false」。在DataForm.BeginningEdit事件處理程序中,我將其設置爲「true」,並在DataForm.EditEnded事件處理程序中將其設置爲「false」。然後,我創建了一個名爲IsEditing的只讀公共屬性,以使該值在外部可用。

1

我不確定IsEditingCanCancelEdit是什麼,它們沒有記錄。

但是有一個Mode屬性是DataFormMode枚舉,ReadOnly,EditAddNew。還有一個IsItemChanged屬性,指示是否有任何實際更改已經開始編輯。

+0

感謝您的回答。我嘗試了這兩個屬性,但他們並沒有給我足夠的東西。如果您已開始更改字段但尚未進行任何以前的更改,則IsItemChanged仍會報告「false」。另一方面,如果您轉移到新記錄但尚未開始對其進行任何更改,則模式將報告「編輯」。 – MylesRip 2010-10-06 17:37:17

3

您可以在調用DomainContext.SubmitChanges()之前調用DataForm.CommitEdit()並完全避免該錯誤。

+0

的確如此,但我一直在考慮讓用戶選擇是否提交或取消更改。 – MylesRip 2010-10-07 16:44:36

+0

我想象這不是你經常給他們的選擇。通常情況下,當焦點發生變化時,事情就會被提交,如果每次焦點離開某個表單字段時提示他們,他們會恨你。我敢肯定,在這種情況下,焦點變化還沒有得到處理。 – 2010-10-07 20:04:37

+0

我有同樣的問題,並調用.CommitEdit()是我的解決方案 – 2013-02-05 12:52:28

0

我剛剛使用此代碼來解決我遇到的問題。這是位於我隱藏,點擊保存按鈕時:

 bool editresult = true; 
     this.FindChildrenByType<DataGrid>().ToList().ForEach(grid => 
     { 
      editresult = editresult && grid.CommitEdit(DataGridEditingUnit.Row, true) && grid.IsValid; 
     }); 

     if (!editresult) 
     { 
      _messager.Alert("There is a problem with one of the items shown on the screen. This will usually be highlighted in red.\r\nPlease correct the item(s) and try saving again."); 
     } 
     else 
     { 
      // Save changes 
     } 

DataGrid.CommitEdit(DataGridEditingUnit.Row,真)告訴DataGrid中犯行,最後布爾告訴格退出編輯模式。這將根據行是否已退出編輯模式返回true或false。通常,在您正在編輯一行的網格中存在驗證錯誤時,網格不會讓您通過單擊另一個項目退出編輯模式,但此調用將允許退出但返回false。 DataGrid.IsValid檢查網格中的所有項目以查看它們是否有效。

3

在我調用SubmitChanges()以修復一個班輪問題之前,我在我的DataGrid上使用了CommitEdit方法(應該與DataForm相同)。

myDataGrid.CommitEdit(DataGridEditingUnit.Row, true); 
相關問題