上一筆、下一筆、第一筆、最末筆《BindingSource的應用 (1)》

BindingSource類別在個人看來是 .NET 2.0的偉大發明之一,它具有兩種用途﹝引述自MSDN文件庫BindingSource 類別﹞:
第一,經由提供間接取值 (Indirection) 層、貨幣管理、變更告知和其他服務,簡化將表單上的控制項繫結至資料的動作。
第二,BindingSource 元件可以當做強型別的資料來源。

       BindingSource類別在個人看來是 .NET 2.0的偉大發明之一,它具有兩種用途﹝引述自MSDN文件庫BindingSource 類別﹞:

       第一,經由提供間接取值 (Indirection) 層、貨幣管理﹝朱大提醒我這個怪怪的,正確來說應該翻成同步化管理才對,不過MSDN文件庫中真的翻譯成貨幣管理﹞、變更告知和其他服務,簡化將表單上的控制項繫結至資料的動作。這可以藉由將 BindingSource 元件附加到資料來源,然後將表單上的控制項繫結至 BindingSource 元件來完成。與資料之間的所有進一步互動 (包括巡覽、排序、篩選及更新) 都是利用 BindingSource 元件的呼叫來完成。

       第二,BindingSource 元件可以當做強型別的資料來源。一般來說,基礎資料來源類型會透過下列其中一項機制而變成固定:

  • 使用Add 方法將項目加入 BindingSource 元件中。
  • DataSource 屬性設定為清單、單一物件或型別。

這兩個機制都會建立強型別清單。BindingSource 可支援簡單和複雜資料繫結,如同其 DataSource 和DataMember 屬性所指示

       在這邊我主要打算要討論第一個功能,說明它在擔任表單控制項與資料來源的中間階層角色的協調能力,以及它和BindingNavigator的整合,相信你一旦用了它就會愛上它。

       BindingSource1

 

       左方是一個範例的畫面,在沒有使用BindingSource的狀況通常我們會直接把DataTable指派給DataDridView.DataSource屬性,在這種情形下,如果想要使用其它的控制項﹝例如Button﹞來控制所選資料列移動﹝假設為單列選擇 DataGridView2.MultiSelect = False﹞,我們通常會採用以下的程式碼:

 

 

  

[往上移一筆]

      If DataGridView1.Rows.Count > 0 Then
           Dim iRowIndex As Integer
           iRowIndex = DataGridView1.CurrentRow.Index
           If iRowIndex > 0 Then  <==必須要注意是否已經到了第一筆
               DataGridView1.Rows(iRowIndex - 1).Selected = True
               DataGridView1.Rows(iRowIndex - 1).Cells(0).Selected = True
           End If
       End If

[往下移一筆]

        If DataGridView1.Rows.Count > 0 Then
            Dim iRowIndex As Integer
            iRowIndex = DataGridView1.CurrentRow.Index
            If iRowIndex < DataGridView1.Rows.Count - 1 Then 
<==必須要注意是否已經到了最末筆
                DataGridView1.Rows(iRowIndex + 1).Selected = True
                DataGridView1.Rows(iRowIndex + 1).Cells(0).Selected = True
            End If
        End If

寫的又臭又長,而且常會因不小心忘了注意指標是否已經移動到第一筆或最後一筆而產生討厭的例外BindingSource2

        不過使用了BindingSource可就不一樣了,只要一行就可以搞定,有沒有覺得看起來很清爽?
        [往上移一筆]   myBindingSource2.MovePrevious()
        [往下移一筆]   myBindingSource2.MoveNext()BindingSource3

       光是可以在DataGridView移動指標還不足以顯示BindingSource的厲害之處,同樣的手法一樣可以用在其它控制項 ,例如像右方所顯示的畫面。如果我們將Textbox直接和DataTable繫結,要做這功能免不了又要搞東搞西弄的灰頭土臉。然而只要把TextBox和DataTable之間加上個BindingSouce,整件事就會變的輕鬆愉快。整個程式的重點不過就是:

       TextBox1.DataBindings.Add("Text", myBindingSource2, "Col1")
       TextBox2.DataBindings.Add("Text", myBindingSource2, "Col2")

       剩下的就是應用那四個方法 MoveFirstMovePreviousMoveNextMoveLast。    

      這個範例可以在此連結下載[VB2005]:BindingSourceTest_0.rar