摘要:這篇文章是講解在Windows Forms中如何使用ADO.NET簡單的將Form和包含任何結構的資料繫結在一起。通過簡單或者複雜的資料繫結,把Form的control的屬性綁定到指定的資料上。
目標:
學習Microsoft.NET平台中資料繫結的基礎知識
學習怎樣產生一個簡單的資料繫結form
學習如何往你產生的資料繫結form中添加ComboBox和ListBox
Learn how to base data-bound forms on the results of parameterized queries.
學習如何綁定TextBox的資料
前提:
閱讀這篇文章應當瞭解一下內容:
理解關聯式資料庫以及知道如何訪問它
瞭解結構化查詢語言 (SQL)SQL
能夠訪問某一個資料庫服務,比如SQL Server或者是Access
內容:
資料繫結和Windows Form的基礎知識
產生簡單的資料繫結Windows Form
使用ComboBox和ListBox
使用TextBox的資料繫結
總結
A. 資料繫結和Windows Form的基礎知識
一般來講,資料繫結是指在運行時期自動化佈建一個或者多個控制項的屬性從結構化的資料來源自動獲得資料的過程。Windows Forms使用ADO.NET來實現資料繫結。使用資料繫結,就不再需要寫代碼來實現串連(Connection)和產生資料集了(DataSet),當然了在一個沒有綁定資料的form中,這些工作還是要自己手寫的。Microsoft.NET的wizard會為你產生必要的ADO.NET代碼,而不需要自己手寫。
Windows Form可以讓你輕鬆的綁定幾乎是包含資料的任何結構。這就意味著你可以幫定任何傳統的資料存放區,比如是儲存在Access或者SQL Server表中的資料,或者是從檔案中讀取的資料,其他控制項包含的資料,數組中的資料。資料是怎樣包含在結構中的對我們這篇文章來說並不重要。
在你把一個form綁定到資料上後,你就可以把form上的控制項和指定的資料元素綁定起來。一般常用的資料繫結包括把TextBox的Text屬性和資料來源的某資料行繫結起來。你同樣可以幫定控制項的圖形屬性、背景圖屬性,或者是form上的任何控制項的任何屬性。
Windows Form包括兩種形式的資料繫結:簡單型和複雜型。他們有各自的優點。
簡單綁定允許你把一個控制項綁定到單獨的資料元素上,這種綁定常用在把一個表中某列的值幫定到一個form的控制項上。使用這種方式,一般是用在僅僅顯示單個值的控制項上。簡單綁定一般是綁定TextBox或者Label的資料。
複雜綁定允許你綁定多個資料元素,常用在把一個表中的多個列或者是多行幫定到控制項上。支援複雜綁定的控制項有:DataGrid、ComboBox、ListBox。
B. 產生簡單的資料繫結Windows Form
.NET開發環境中使用的最基本的資料繫結用途是在一個DataGrid中顯示一個表的內容。下面的這個例子說明了幾個基本的步驟:(不包括細節)
1. 產生一個Windows Form
2. 在form中產生、配置一個DataSet
3. 在form中建立一個DataGrid,並且把他綁定到資料上
使用這個步驟形成的一個例子如圖1所示
圖4. Generate Dataset對話方塊指定對象名和其他的屬性
2. 輸入dsCustomers作為要產生的DataSet對象的名字。注意保證你選擇了Add this dataset to the designer選項。點擊OK。就這樣產生了所需要的DataSet。
這一步完成之後,你就可以在form的非可視控制項區看到一個新的控制項dsCustomers1。這個控制項是檔案dsCustomers.xsd的一個引用,我們可以在Solution Explorer視窗中看到這個檔案。在這個XSD檔案有一個不顯示的類檔案,我們可以通過點擊Project菜單中的Show All Files來顯示這個檔案。接著就可以點擊dsCustomers.xsd檔案左邊的+號後看到這個類檔案dsCustomers.vb,如下圖5所示。
圖5.XML schema definition (XSD)檔案有一個類檔案來把DataSet調入記憶體
dsCustomers.vb有對應到實際DataSet的屬性和對應到查詢語句中指定的每一列的屬性。雖然,我們並不需要對這個類檔案做什麼操作,不過瞭解它的存在是非常有用的。
添加一個DataGrid控制項來顯示資料
現在可以產生一個form來顯示包含在DataSet中的資料了。在這個例子裡,添加一個單獨的DataGrid控制項到form中。這個DataGrid用來顯示包含在DataSet中的資料。按照下面的步驟開始:
1. 在視窗的頂端,點擊標籤來顯示frmCustomers form。
2. 點擊ToolBox標籤的Windows Forms,把一個DataGrid控制項拖到form中來。調整DataGrid的Size屬性到一個適當的大小。
3. 按下F4來顯示這個DataGrid的屬性視窗。
4. 選擇DataSource屬性的值為dsCustomers1
5. 選擇DataMember屬性的值為Customers
這些步驟就完成了把一個DataGrid綁定到一個DataSet上。為了看到顯示的資料,還需要下面的一步工作。
把資料填到DataGrid控制項上
雖然DataGrid控制項已經綁定到了DataSet上,不過當form調入的時候,DataSet並不自動的把資料匯出導DataGrid上。我們使用form的load事件在from調入的時候來填充DataGrid的資料。
Private Sub frmCustomers_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' Load the Data Grid Control
DsCustomers1.Clear()
SqlDataAdapter1.Fill(DsCustomers1, "Customers")
End Sub
在load事件中,首先清除dsCustomers1中的資料(Clear),然後用sqlDataAdapter1的Fill方法來填充dsCustomers1中的資料。在這裡,要填寫第二個參數為表名,這個表名用於我們先前指定的DataGrid的DataMember屬性。
運行
現在就可以在DataGrid中看到顯示的Customers表中的資料了。在運行之前我們還要做一個工作。由於我們更改了form的Name屬性,因此要告訴Project從哪個form開始運行。
1. 在Solution Explorer視窗中,點擊項目名稱。
2. 右擊然後在捷徑功能表中選擇Properties
3. 點擊Startup Object,然後從列表中選擇frmCustomers。
4. 點擊OK
5. 按下F5來運行程式。如果你所作的都正確的話,就可以看到如圖1顯示的DataGrid中的Customer表中的資料。
C. 使用ComboBox和ListBox
剛才的例子適合於小資料集,如果用在一個客戶表有成千上萬的資料的時候就不太合適了。問題就在於它把所有的客戶資料都讀取出來並且顯示在DataGrid上。作為例子可以採用,如果作為一個產品程式的話就不再合適了。
資料庫伺服器對於讀取大量資料進行了最佳化,不過我們應當唯讀取小資料集。如果我們在前面的例子中加上一個ComboBox來選擇國家並且只顯示這個國家的客戶的話,將會變得更加的有效。在這一節裡,我們就這麼做。下一節講怎樣使用ComboBox來限制顯示在DataGrid中的資料。我們按照下面的步驟來做:
1. 向form中添加第二個DataAdapter
2. 產生第二個DataSet
3. 向form中添加一個ComboBox
4. 把ComboBox綁定到剛才產生的DataSet上
5. 從DataAdapter中獲得要顯示在ComboBox中的資料
向form添加第二個DataAdapter
在使用ComboBox之前,先增加一個DataAdapter。並且使用這個DataAdapter來產生包含有不重複的國家列表的DataSet資料。添加DataAdapter按照下面步驟作:
1. 在Toolbox的Data標籤,選擇SqlDataAdapter,拖放到form中。接著就會顯示DataAdapter Configuration Wizard對話方塊。點擊Next。
2. 選擇串連到Northwind資料庫的串連。點擊Next
3. 選擇Use SQL Statements,點擊Next
4. 輸入下面的SQL語句:
select distinct Country from Customers
5. 點擊對話方塊上的Advanced Options按鈕
6. 清除如下圖6所示的Generate Insert, Update, and Delete Statements選項。在我們使用ComboBox顯示國家的時候,這些語句用不上。點擊OK來關閉這個對話方塊。
圖6.不要選擇Generate Insert, Update and Delete Statement選項
7. 點擊Finish來產生DataAdapter
現在在form中就有一個名字為sqlDataAdapter2的對象了。
產生第二個DataSet
接著就來產生用於這個新DataAdapter的DataSet類和XSD檔案。按照這些步驟作:
1. 點擊Data,然後電擊Generate DataSet。接著就顯示Generate DataSet對話方塊。
2. 保證選擇了列表框中的Customers(sqlDataAdapter2)
3. 點擊New,然後輸入名字dsCountries。保證選擇了Add this DataSet to the Designer選項。點擊OK。就產生了DataSet。
就這樣,添加了一個新的對象dsCountries和一個新的XSD檔案dsCountries.xds。這兩項產生了DataSet類和接著就會用在ComboBox的資料繫結中。
添加ComboBox
現在可以添加ComboBox了,調整一下form的大小和DataGrid的大小來顯示這個ComboBox。接著,就可以從Toolbox中拖放一個ComboBox到form中,把他放在DataGrid的上面,就像下面的圖7那樣:
圖7. 包含有ComboBox和DataGrid的Form
把ComboBox綁定到DataAdapter上
剛才添加的ComboBox還沒有綁定到任何資料上。按照如下步驟把他綁定到dsCountries上:
1. 選擇這個ComboBox
2. 把Name屬性改為cboCountry
3. 設定DataSource屬性為dsCountries1。這樣就指定了他的資料來源。
4. 把DropDownStyle屬性改為DropDownList。
5. 設定DisplayMember屬性為Customers.Country。點擊DisplayMember屬性的下拉式清單,然後展開Customers來顯示可以使用的列。這個步驟就指定了要顯示的列。
6. 設定ValueMember屬性為Customers.Country。ValueMember屬性用在當選擇項時,實際使用的值。
匯出資料到ComboBox
和使用DataGrid一樣,我們要手寫一些代碼來匯出資料到ComboBox。在form的load事件中我們在原有的代碼後再添加如下的代碼:
Private Sub frmCustomers_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
' Load the data grid control
DsCustomers1.Clear()
SqlDataAdapter1.Fill(DsCustomers1, "Customers")
' Load the Combo Box
DsCountries1.Clear()
SqlDataAdapter2.Fill(DsCountries1, "Customers")
End Sub
用黑體顯示的代碼就是我們要添加的代碼。看上去,它和顯示DataGrid資料的代碼幾乎是一樣的。