DataView

DataView 的一个主要功能是允许在 Windows 窗体和 Web 窗体上进行数据绑定。

另外,可自定义 DataView 来表示 DataTable 中数据的子集。此功能让您拥有绑定到同一 DataTable、但显示不同数据版本的两个控件。例如,一个控件可能绑定到显示表中所有行的 DataView,而另一个控件可能配置为只显示已从 DataTable 删除的行。DataTable 也具有 DefaultView 属性。它返回表的默认 DataView。例如,如果希望在表上创建自定义视图,请在 DefaultView 返回的 DataView 上设置 RowFilter

 

创建 DataView

Visual Studio 2005

 

创建 DataView 的方法有两种。可以使用 DataView 构造函数,也可以创建对 DataTableDefaultView 属性的引用。DataView 构造函数可以为空,也可以采用 DataTable 作为单个参数,也可以同时采用 DataTable 与筛选条件、排序条件和行状态筛选器。有关可以用于 DataView 的其他参数的更多信息,请参见使用 DataView 对数据排序和筛选

由于在创建 DataView 时以及在修改任何 Sort、RowFilter 或 RowStateFilter 属性时都会生成 DataView 的索引,所以当创建 DataView 时,通过以构造函数参数的形式提供任何初始排序顺序或筛选条件,可以实现最佳性能。如果在不指定排序或筛选条件的情况下创建 DataView,然后设置 Sort、RowFilter 或 RowStateFilter 属性,则会使索引生成至少二次:一次是在创建 DataView 时,另一次是在修改任何排序或筛选属性时。

请注意,如果使用不采用任何参数的构造函数来创建 DataView,那么在设置 Table 属性之前,将无法使用 DataView。

以下代码示例演示如何使用 DataView 构造函数来创建 DataView。RowFilter、Sort 列和 DataViewRowState 将与 DataTable 一起提供。

Dim custDV As DataView = New DataView(custDS.Tables( "Customers"), _
    "Country = 'USA'", _
    "ContactName", _
    DataViewRowState.CurrentRows)

以下代码演示如何使用该表的 DefaultView 属性获取对 DataTable 的默认 DataView 的引用。

Dim custDV As DataView = custDS.Tables( "Customers").DefaultView

创建和使用 DataView

Visual Studio 2005
中所存储的数据的不同视图,这种功能通常用于数据绑定应用程序。使用 DataView,您可以使用不同排序顺序显示表中的数据,并且可以按行状态或基于筛选器表达式来筛选数据。

DataView 提供基础 DataTable 中的数据的动态视图:内容、排序和成员关系会实时反映其更改。此行为不同于 DataTable 的 Select 方法,后者从表中按特定的筛选器和/或排序顺序返回 DataRow 数组,虽然其内容反映对基础表的更改,但其成员关系和排序却则保持静态。DataView 的动态功能使其成为数据绑定应用程序的理想选择。

与数据库视图类似,DataView 为您提供了可向其应用不同排序和筛选条件的单个数据集的动态视图。但是,与数据库视图不同的是,DataView 不能作为表来对待,无法提供联接的表的视图。另外,还不能排除存在于源表中的列,也不能追加不存在于源表中的列(如计算列)。

可以使用 DataViewManager 来管理 DataSet 中所有表的视图设置。DataViewManager 为您提供了一种方便的方法来管理每个表的默认视图设置。在将一个控件绑定到 DataSet 的多个表时,绑定到 DataViewManager 是理想的选择。

本节内容

创建 DataView

描述如何为 DataTable 创建 DataView。

使用 DataView 对数据排序和筛选

描述如何设置 DataView 的属性,以返回符合特定筛选条件的数据行的子集或以特定排序顺序返回数据。

使用 DataView 查看数据

描述如何访问 DataView 的内容,在 DataView 中查找特定的数据行,以及基于父子关系创建数据的视图。

使用 DataView 修改数据

描述如何通过 DataView 修改基础 DataTable 中的数据(包括启用或禁用更新)。

使用 DataView 事件

描述如何使用 ListChanged 事件接收在 DataView 的内容或顺序得到更新时发出的通知。

使用 DataViewManager 设置默认表视图

描述如何使用 DataViewManager 来管理 DataSet 中每个表的 DataView 设置。

搜索 DataView

Visual Studio 2005

 

可以使用 DataViewFindFindRows 方法,根据排序关键字值搜索行。Find 和 FindRows 方法中的搜索值是否区分大小写取决于基础 DataTable 的 CaseSensitive 属性。搜索值必须完全匹配现有排序关键字值才能返回结果。

Find 方法返回一个整数,该整数表示匹配搜索条件的 DataRowView 的索引。如果多个行匹配搜索条件,则只返回第一个匹配 DataRowView 的索引。如果未找到匹配项,Find 将返回 -1。

若要返回匹配多个行的搜索结果,可以使用 FindRows 方法。FindRows 的工作方式与 Find 方法类似,不同的只是前者返回引用 DataView 中所有匹配行的 DataRowView 数组。如果未找到匹配项,DataRowView 数组将为空。

若要使用 Find 或 FindRows 方法,必须通过将 ApplyDefaultSort 设置为 true 或通过使用 Sort 属性来指定排序顺序。如果未指定排序顺序,则将引发异常。

Find 和 FindRows 方法将一个值数组用作输入,该数组的长度与排序顺序所包含的列数相匹配。在对单个列进行排序的情况下,可以传递单个值。对于包含多个列的排序顺序,可传递一个对象数组。请注意,当对多个列进行排序时,对象数组中的值必须匹配在 DataView 的 Sort 属性中指定的列的顺序。

以下代码示例显示对具有单个列排序顺序的 DataView 调用的 Find 方法。

 

Dim custView As DataView = _
  New DataView(custDS.Tables( "Customers"), "", _
  "CompanyName", DataViewRowState.CurrentRows)

Dim rowIndex As Integer = custView.Find( "The Cracker Box")

If rowIndex = -1 Then
  Console.WriteLine( "No match found.")
Else
  Console.WriteLine( "{0}, {1}", _
    custView(rowIndex)( "CustomerID").ToString(), _
    custView(rowIndex)( "CompanyName").ToString())
End If

如果 Sort 属性指定多个列,则必须按 Sort 属性指定的顺序为每个列传递包含搜索值的对象数组,如以下代码示例所示。

Dim custView As DataView = _
  New DataView(custDS.Tables( "Customers"), "", _
  "CompanyName, ContactName", _
  DataViewRowState.CurrentRows)

Dim foundRows() As DataRowView = _
  custView.FindRows( New object() { "The Cracker Box", "Liu Wong"})

If foundRows.Length = 0 Then
  Console.WriteLine( "No match found.")
Else
  Dim myDRV As DataRowView
  For Each myDRV In foundRows
    Console.WriteLine( "{0}, {1}", _
      myDRV( "CompanyName").ToString(), myDRV( "ContactName").ToString())
  Next
End If


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值