对数据进行排序和筛选
DataView 为在 DataTable 中对数据排序和筛选提供了多种方法:
可以使用 Sort 属性指定单个或多个列排序顺序并包含 ASC(升序)和 DESC(降序)参数。
可以使用 ApplyDefaultSort 属性自动以升序创建基于表的一个或多个主键列的排序顺序。 只有当 Sort 属性为空引用或空字符串并且表已定义主键时,ApplyDefaultSort 才适用。
可以使用 RowFilter 属性根据行的列值来指定行的子集。 有关 RowFilter 属性的有效表达式的详细信息,请参见 DataColumn 类的 Expression 属性的参考信息。
如果要返回对数据的特定查询的结果(而不是提供数据子集的动态视图),请使用 DataView 的 Find 或 FindRows 方法,而不是设置 RowFilter 属性来实现最佳性能。 设置 RowFilter 属性会重新生成数据的索引,从而增加应用程序的系统开销并降低性能。 最好将 RowFilter 属性用于通过绑定控件显示筛选结果的数据绑定应用程序。 Find 和 FindRows 方法会利用当前的索引,而不需要重新生成索引。 有关 Find 和 FindRows 方法的更多信息,请参见查找行。
可以使用 RowStateFilter 属性指定要查看的行版本。 DataView 根据基础行的 RowState 来隐式地管理要公开的行版本。 例如,如果 RowStateFilter 设置为 DataViewRowState.Deleted,由于不存在 Current 行版本,DataView 将公开所有 Deleted 行的 Original 行版本。 可以使用 DataRowView 的 RowVersion 属性来确定要公开行的哪个行版本。
下表显示了 DataViewRowState 选项。
DataViewRowState 选项 说明 CurrentRows 所有 Unchanged、Added 和 Modified 行的 Current 行版本。 这是默认值。 已添加 所有 Added 行的 Current 行版本。 已删除 所有 Deleted 行的 Original 行版本。 ModifiedCurrent 所有 Modified 行的 Current 行版本。 ModifiedOriginal 所有 Modified 行的 Original 行版本。 无 没有行。 OriginalRows 所有 Unchanged、Modified 和 Deleted 行的 Original 行版本。 Unchanged 所有 Unchanged 行的 Current 行版本。
有关行状态和行版本的详细信息,请参阅行状态和行版本。
以下代码示例创建一个视图,该视图显示所有库存量小于或等于再订购量的产品,这些产品首先按供应商 ID 排序,然后按产品名称排序。
Dim prodView As DataView = New DataView(prodDS.Tables("Products"), _
"UnitsInStock <= ReorderLevel", _
"SupplierID, ProductName", _
DataViewRowState.CurrentRows)
DataView prodView = new DataView(prodDS.Tables["Products"],
"UnitsInStock <= ReorderLevel",
"SupplierID, ProductName",
DataViewRowState.CurrentRows);