2009-08-03 77 views
4

這裏的情景(使用綁定到數據表中的BindingSource的一個DataSet中):撤消所有更改自BindingSource的最後一次EndEdit中調用

  1. 用戶創建一個新的地址簿 接觸,在第一和最後填充 數據綁定控件中的名稱。
  2. 他按Apply,其事件 處理程序調用 BindingSource.EndEdit()。
  3. 然後他意識到有一個 錯誤,並添加了一個電子郵件地址。
  4. 但是當他按Apply, 驗證失敗(無效的電子郵件 格式),所以EndEdit()不會被調用。
  5. 他決定不進行編輯,並且 按下取消按鈕,取消按鈕的事件處理程序調用 BindingSource.CancelEdit()。
  6. 但是,而不是恢復到與整個記錄的只是第一和 姓和沒有電子郵件的 的BindingSource反而擺脫了 的 新的聯繫人。

有沒有什麼辦法可以撤消自上次調用EndEdit()以來的操作?我的印象是,CancelEdit()應該如何工作。

+1

我有一個類似的問題,所以我會很感興趣,看看你是否得到了一個很好的答案。我的解決方法是直接調用DataRowView對象上的EndEdit()。 – overslacked 2009-08-03 19:40:56

+0

當您在DataRowView上調用它時,DataRowState會更改爲什麼?它仍然是新增的,還是變成修改或不變? – Dov 2009-08-03 20:27:59

回答

2

作爲解釋,DataTable僅爲記錄保留2個狀態,即原始和當前。您的請求將需要多個州。

爲了實現你想要的,你應該刷新對數據庫的更改(例如Adapter.Update(table)),以響應成功應用。這會將您的當前狀態提升爲原始狀態,並且下一個取消可以回退到該狀態

雖然這可能會也可能不符合您的要求。