您的位置:首页 > 其它

ADO.NET 2.0 - 如何使用 DataView 来筛选数据

2006-10-25 16:32 639 查看
欲通过 DataView 来筛选 DataTable 中的数据,请采用下列方式:

Ø 使用第三个多载版本的 DataView 建构函式来建立 DataView 对象的时候,即可使用 RowFilter 参数来设定筛选数据的表达式。此一表达式的设定方式与 DataColumnExpression 属性的设定方式相同,相关说明,请参阅Visual Basic 2005档案IO与数据存取秘诀」一书的第五章。

Ø 您也可以在建立 DataView 对象之后再设定其 RowFilter 属性以便定要如何筛选数据。RowFilter 属性的设定方式与 DataColumn Expression 属性的设定方式相同,相关说明,请参阅Visual Basic 2005档案IO与数据存取秘诀」一书的第五章。

Ø 当您使用第三个多载版本之 DataView 建构函式来建立 DataView 对象的时候,即可使用 RowState 参数来设定数据列状态的筛选条件。比方说,如果您将 RowState 参数设定成 DataViewRowState.Deleted,则 DataView 会公开所有 Deleted 数据列的 Original 数据列版本,原因是没有 Current 数据列版本。您可以使用 DataRowView RowVersion 属性,来判断公开的数据列版本为何。

RowState 参数的类别是列举类别 DataViewRowState,下表列出 DataViewRowState 的所有成员与说明。

DataViewRowState

说明

CurrentRows

所有Unchanged、Added和Modified数据列的Current数据列版本。此为默认值。

Added

所有Added数据列的Current数据列版本。

Deleted

所有Deleted数据列的Original数据列版本。

ModifiedCurrent

所有Modified数据列的Current数据列版本。

ModifiedOriginal

所有Modified数据列的Original数据列版本。

None

无资料列。

OriginalRows

所有Unchanged、Modified和Deleted数据列的Original数据列版本。

Unchanged

所有Unchanged数据列的Current数据列版本。

Ø 您也可以在建立 DataView 对象之后再设定其 RowStateFilter 属性以便决定要如何筛选数据列版本。RowStateFilter 属性的设定方式与 RowState 参数的设定方式相同,于此不再赘述。




程序范例

上图所示的程序能够在执行阶段动态设定 DataView RowFilter 属性,以便让使用者能够通过一或两个字段来动态筛选数据。兹将程序代码完整列示如下:

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 dbo.章立民工作室;" & _
"SELECT DISTINCT 部门FROM dbo.章立民工作室;", 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

' 建立 DataView 对象
dv = ds.Tables("章立民工作室").DefaultView

' 显示 DataView 中的数据列数目
txtRowCount.Text = dv.Count.ToString

' 替选择部门的下拉式清单方块加入选项
For i As Integer = 0 To ds.Tables("部门").Rows.Count – 1
ComboBoxDepartment.Items.Add(ds.Tables("部门").Rows(i)(0))
Next

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

Private Sub btnFilter_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnFilter.Click
Dim RowFilterExpr As String = ""
If ComboBoxDepartment.SelectedIndex > -1 Then
RowFilterExpr = _
"部门= '" & ComboBoxDepartment.SelectedItem.ToString() & "'"
End If
If ComboBoxGender.SelectedIndex > -1 Then
If RowFilterExpr <> "" Then
RowFilterExpr &= " AND "
End If
RowFilterExpr &= _
"性别= '" & ComboBoxGender.SelectedItem.ToString() & "'"
End If

If RowFilterExpr = "" Then
MessageBox.Show("您没有设定任何筛选条件")
Exit Sub
End If

dv.RowFilter = RowFilterExpr

' 显示 DataView 中的数据列数目
txtRowCount.Text = dv.Count.ToString
End Sub

End Class

章立民研究室敬上

期待更多精彩,敬请关注:

http://www.china-pub.com/static/jsj_zlm_060824.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: