You are on page 1of 3

<< VS2008免費電子書 | Home | System.

Configuration >>

使用BindingSource連接資料庫-PART 2

在上一篇筆者簡單的介紹了如何利用BindingSource來連接資料庫,但是BindingNavigator的部分以及
COmbobox沒有用到哩,這一篇筆者繼續介紹下去
首先是BindingNavigator,拉出這個控制項之後,其實我們只要簡單的設定"BindingSource"的屬性之
後,BindingNavigater便會自動設定與BindingSource的關連,也就會有導覽、新增、刪除的功能了,像
是下面這張圖

就這麼簡單?沒錯,就是這麼簡單,但是下面這些屬性還是要稍微瞭解一下

AddNewItem
DeleteItem
CountItem
PositionItem
MoveFirstItem
MoveLastItem
MoveNextItem
MovePreviousItem

這 些屬性都是對應到一個ToolStripButton,所以說當我們不要它內建的功能的時候,把對應的屬性設
定成"無"就可以了;以一個常見的例子來說, 設定好BindingNavigator的BindingSource後,執行程式
並新增一些資料,然後按下刪除鍵,按刪除的時候系統不會跳出警告訊息說 資料即將被刪除,而這時
候直覺想到的就是在刪除按鈕的Click事件裡面寫入相關的警告訊息,但是這樣子做了之後,不管使用者
選擇刪除或是不刪除最後資料 還是會被刪掉,怎麼辦呢?這時候就要把DeleteItem屬性設定成無,之後
用下面的程式碼來取代原先預設的動作

view plain print ?

01. Private Sub BindingNavigatorDeleteItem_Click(ByVal sender As System.Object, ByVal e As System.Event


02. If MessageBox.Show("確定刪除", "警
告", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
03. Me.BindingSource1.RemoveCurrent()
04. ''下面可以自行加入是否要儲存的程式碼
05. End If
06. End Sub
view plain copy to clipboard print ?

01. Private Sub BindingNavigatorDeleteItem_Click(ByVal sender As System.Object, ByVal e As System.Event


02. If MessageBox.Show("確定刪除", "警
告", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
03. Me.BindingSource1.RemoveCurrent()
04. ''下面可以自行加入是否要儲存的程式碼
05. End If
06. End Sub

另外由於Navigator內建沒有儲存的功能,所以我們自行拉出一個按鈕來作儲存的功能,像是下圖這樣

新增了按鈕(ToolStriptButton)之後,下面這些是常用的屬性,可以試試看他的效果

Text
ToolTipText
Image
DisplayStyle

儲存的程式碼會長成這個樣子

view plain print ?

01. Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSa
02. Me.BindingSource1.EndEdit()
03. Me.PeopleTableAdapter.Update(Me.MyDBDataSet.People)
04. Me.MyDBDataSet.People.AcceptChanges()
05. MessageBox.Show("儲存完成")
06. End Sub

view plain copy to clipboard print ?

01. Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSa
02. Me.BindingSource1.EndEdit()
03. Me.PeopleTableAdapter.Update(Me.MyDBDataSet.People)
04. Me.MyDBDataSet.People.AcceptChanges()
05. MessageBox.Show("儲存完成")
06. End Sub

其中為什麼要先呼叫EndEdit呢?主要是要結束編輯的狀態,如果沒有呼叫EndEdit的話你會發現如果編
輯完成後把游標移動到其他的儲存格或是資料列,再去按儲存,這時候可以儲存成功;但是如果游標停
留在同一個儲存格的話這時候去按儲存是會沒有效果的。
再 過來我們呼叫了PeopleTableAdapter的Update方法,這邊我們要簡單的說明一下DataSet;DataSet
是屬於離線型的,也就 是當我們提取資料後他就不會持續跟資料庫保持連線中的狀態,而是會將資料
提取到用戶端電腦的記憶體中,之後的操作便是針對記憶體中的資料去做操作,完成之 後在利用
Adapter的Update功能一次將所有的資料Update回資料庫中。
再過來我們呼叫了AcceptChanges這個方法,那這個方法是在做什麼?這是由於在每個資料列中都有一
個狀態的屬性(RowState),總共會有下面幾種

Added
Deleted
Detached
Modified
Unchanged
Update方法就是依照這些狀態去判斷要用什麼方式去對資料庫做更新的,而呼叫了AcceptChanges之
後便會將狀態改為UnChangeed,也就是認可變更的意思。
大致上是這樣子,再過來就是要動手做了,馬上試試看吧。
下 面我們大致提一下Combobox的部分,有時候我們會用到像關連的東西,像是我們建立的測試資料庫
中,部門資料表其中有ID跟名稱的部分,而每個人都有 各自所屬的部分,而對於使用者來說在設定的
時候如果直接用ID讓哪做設定的話,使用者可能看不懂ID,或是說用ID來看比較沒有那麼直覺,那如果
想要讓使 用者選擇的時候直接是看到名稱,那應該怎麼做呢?下面是屬性設定的擷取圖

使用資料繫結我們可以很簡單的達到這樣的功能,"選取的值"設定成BindingSource的人員資料表
(People)的部門ID(pDepartment),這樣子使用者在選取的時候也對將對應的ID值填入People資料表中
了。
利用BindingSource來連接資料庫大致上我們介紹到這邊,下一篇預計介紹一下xsd檔案的功用以及一些
我們可以利用或是設定的部分。
如果您需要目前為止的範例檔案可以從這邊 下載

bauann@dotblog

posted on 2008/4/9 20:50 | 我要推薦 | 閱讀數 : 1181 | 分類[ Visual Basic ] 訂閱

關連文章
在裝置(mobile)播放mp3檔案
System.Configuration
VS2008免費電子書
取得視窗(工作區)的長寬

Your Comments.
目前沒有回應.

回應

You might also like