ADO.NET 2.0 - 如何使用 DataView 来排序数据
欲通过 DataView 来排序 DataTable 中的数据,请采用下列方式:
n 当您使用第三个多载版本的 DataView 构建函式来建立 DataView 对象时,即可使用 Sort 参数来决定要根据一或多字段来排序资料。您可以在字段名称之后加上关键词 ASC 或 DESC 以便决定要根据此字段来递增或递减排序,预设为递增排序。假如您要根据多个字段栏排序数据,请在各字段之间使用逗号(,)来加以分隔。
n 您也可以在建立 DataView 对象之后再设定其 Sort 属性以便决定要如何排序数据。Sort 属性的设定方式与 Sort 参数的设定方式完全相同。
n 您可以去设定 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
章立民研究室敬上
期待更多精彩,敬请关注: