ADO.NET 2.0 - 如何使用 DataView 來排序資料

摘要:ADO.NET 2.0 - 如何使用 DataView 來排序資料

欲透過 DataView 來排序 DataTable 中的資料,請採用下列方式: 

q 當您使用第三個多載版本的 DataView 建構函式來建立 DataView 物件時,即可使用 Sort 參數來決定要根據一或多欄位來排序資料。您可以在欄位名稱之後加上關鍵字 ASC DESC 以便決定要根據此欄位來遞增遞減排序,預設為遞增排序。假如您要根據多個欄位欄排序資料,請在各欄位之間使用逗號(,)來加以分隔。

q 您也可以在建立 DataView 物件之後再設定其 Sort 屬性以便決掉要如何排序資料。Sort 屬性的設定方式與 Sort 參數的設定方式完全相同。

q  您可以去設定 DataView ApplyDefaultSort 屬性,以便決定是否要根據主索引鍵來排序資料。如果您將 ApplyDefaultSort 屬性設定成 True,表示要根據主索引鍵來排序資料;如果您將 ApplyDefaultSort 屬性設定成 False(此為預設值),表示不要根據主索引鍵來排序資料。

請注意,只有在 Sort 屬性為 Null 參考或空字串,以及當資料表已定義主索引鍵時,才會套用 ApplyDefaultSort 屬性的設定。 

 

圖表1 

程式範例 

圖表 1 所示的程式示範如何在執行階段動態設定 DataView Sort 屬性,以便讓使用者能夠透過一或兩個欄位來動態排序資料。茲將程式碼完整列示如下:

Option Strict On
Imports
System.Data.SqlClient
Public Class Form1
  Private ds As New DataSet
  Private dv As DataView

  Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
  '
利用SqlConnectionStringBuilder 物件來構建連接字串。
  Dim connectStringBuilder As New SqlConnectionStringBuilder()
  connectStringBuilder.DataSource = "(local)SQLEXPRESS"
  connectStringBuilder.InitialCatalog = "
北風貿易"
  connectStringBuilder.IntegratedSecurity = True

  Try
     Using cn As New SqlConnection(connectStringBuilder.ConnectionString)
       cn.Open()

       Dim cmdLiming As New SqlCommand( _
         "SELECT
部門, 性別, 員工編號, 身份證字號, 姓名, 地址, 郵遞區號, " & _

         "出生日期, 婚姻狀況, 僱用日期, 起薪, 目前薪資, " & _
         "
加薪日期 FROM 章立民工作室"
, cn)

       Using drLiming As SqlDataReader = cmdLiming.ExecuteReader()

           ds.Load(drLiming, LoadOption.OverwriteChanges, _
               New String() {"
章立民工作室"})

           '
BindingSource 元件繫結至 DataSet 當中的「章立民工作室」資料表。
           Me.BindingSource1.DataSource = ds.Tables("章立民工作室")

           '
DataGridView 控制項繫結至 BindingSource 元件。
           Me.DataGridView1.DataSource = Me.BindingSource1

       End Using
     End Using

     For i As Integer = 0 To ds.Tables(0).Columns.Count
1
         ComboBoxSortColumn1.Items.Add(ds.Tables(0).Columns(i).ColumnName)
     Next

     For i As Integer = 0 To ds.Tables(0).Columns.Count
1
         ComboBoxSortColumn2.Items.Add(ds.Tables(0).Columns(i).ColumnName)
     Next

     '
建立 DataView 物件
     dv = ds.Tables(0).DefaultView

     Catch ex As Exception
         MessageBox.Show(ex.Message)
     End Try
  End
Sub

 
'
根據使用者的選擇來設定 DataView 物件的 Sort 屬性
 
Private Sub btnSort_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnSort.Click
    Dim SortExpr As String
    If ComboBoxSortColumn1.SelectedIndex > -1 Then
        SortExpr = ComboBoxSortColumn1.SelectedItem.ToString & _
          IIf(RadioButton1.Checked, " ASC", " DESC").ToString
        If ComboBoxSortColumn2.SelectedIndex > -1 Then
            SortExpr &= _
              ", " & ComboBoxSortColumn2.SelectedItem.ToString & _
              IIf(RadioButton3.Checked, " ASC", " DESC").ToString
        End If
        dv.Sort = SortExpr
    Else
        MessageBox.Show("
您至少必須選取排序的第一個欄位")
    End If
   End
Sub
End
Class