摘要: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