正確的 Databinding的做法

正確的 Databinding的做法….
我在範例程式那樣作是正確的…..
錯的地方是在於…..Button_click 事件,
還記得 Button1_Click( ) 事件裡, 我做了什麼事情嗎??
沒錯就是 將 DataSet 裡面的資料 更新回到資料庫 ( Microsoft Access )
問題就是出在更新回去的地方….有兩個地方寫錯了….
1. 因為我所有的 控制項 ( Textbox1 , Textbox2) 都已經跟我的 DataSet結合了….
    因此, 我的 控制像裡面的 Textbox1.text 或是 Textbox2.text 的值只要一變動DataSet 就會跟著變更, 但是, 問題就在於 DataSet 並不知道你何時會希望變更完畢 ??!!
當然啦….在本例當中是 Button_Click 事件中就應該要結束 DataSet 變更
不過哩…DataSet卻並不知道…..
所以,無論怎麼更新都不對….
因此應該要告訴 DataSet 請他結束變更….
這一個結束的命令, 其實 會造成該筆 DataRow 變成 RowState  Modified 狀態 ( 這正是我們所期待的狀態阿…. )
因此…就成功了…
寫法如下….
Me.BindingContext(DataSet, "DataTable").EndCurrentEdit()Me.BindingContext(DataSet, "DataTable").EndCurrentEdit()
2. 另外一個錯誤….( 其實不很重要!!… )
   祇是會造成一些不必要的困擾而已….
   就是, 在我給你的範例當中…..我本是這樣寫的….
  
           If Not changes Is Nothing Then
            Me.BindingContext(ds.Tables("member")).EndCurrentEdit()
            da.Update(changes)
            changes.AcceptChanges()
        End If
但這樣….如果當使用者只曾經跟新過一次 比方由 aaa -> xxx
但是 ….Button_Click 卻被觸發好幾次….
那麼除了第一次會成功之外….其他次都會出現錯誤…..
因此…應該寫成 
        If Not changes Is Nothing Then
            Me.BindingContext(ds.Tables("member")).EndCurrentEdit()
            da.Update(changes)
          End If
        ds.Tables("member").AcceptChanges()
甚至更好的寫法應該寫成
Try
        If Not changes Is Nothing Then
            Me.BindingContext(ds.Tables("member")).EndCurrentEdit()
            da.Update(changes)
          End If
        ds.Tables("member").AcceptChanges()
Cache e As Exception
end try
利用 Try …. Cache ….End try 包圍起來更好…..
以上是我的心得, 試試看吧….
 
廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s