可以使用 Rows 和 Columns 集合来访问 DataTableDataTable 的内容。 还可以使用 Select 方法根据搜索条件、排序顺序和行状态等返回 DataTable 数据的子集。 此外,在使用主键值搜索特定行时,还可以使用Find方法DataRowCollection。
对象的 Select 方法 DataTable 返回一组 DataRow 与指定条件匹配的对象。
Select 采用筛选器表达式、排序表达式和 DataViewRowState 的可选参数。 筛选器表达式根据值标识要返回 DataColumn 的行,例如 LastName = 'Smith'。 排序表达式遵循对列进行排序的标准 SQL 约定,例如 LastName ASC, FirstName ASC。 有关编写表达式的规则,请参阅 Expression 类的属性 DataColumn 。
小窍门
如果您多次调用 Select 的方法,可以通过首先为DataTable 创建一个DataView来提高性能。 创建表 DataView 的行索引。 然后,该方法 Select 使用该索引,显著缩短了生成查询结果的时间。 有关为 DataView 创建 a 的信息,请参阅 DataViews。
基于DataViewRowState,该方法Select确定要查看或操作的行的版本。 下表描述了可能的 DataViewRowState 枚举值。
| DataViewRowState 值 | DESCRIPTION |
|---|---|
| CurrentRows | 当前行,包括未更改、添加和修改的行。 |
| 已删除 | 已删除的行。 |
| ModifiedCurrent | 当前版本,它是原始数据的修改版本。 (请参阅 ModifiedOriginal。 |
| ModifiedOriginal | 所有已修改行的原始版本。 当前版本使用 ModifiedCurrent 提供。 |
| 已添加 | 新行。 |
| 没有 | 没有。 |
| OriginalRows | 原始行,包括未更改的行和已删除的行。 |
| 不变 | 未更改的行。 |
在以下示例中,将筛选对象DataSet,以便仅处理设置为 DataViewRowState行。
Dim column As DataColumn
Dim row As DataRow
Dim currentRows() As DataRow = _
workTable.Select(Nothing, Nothing, DataViewRowState.CurrentRows)
If (currentRows.Length < 1 ) Then
Console.WriteLine("No Current Rows Found")
Else
For Each column in workTable.Columns
Console.Write(vbTab & column.ColumnName)
Next
Console.WriteLine(vbTab & "RowState")
For Each row In currentRows
For Each column In workTable.Columns
Console.Write(vbTab & row(column).ToString())
Next
Dim rowState As String = _
System.Enum.GetName(row.RowState.GetType(), row.RowState)
Console.WriteLine(vbTab & rowState)
Next
End If
DataRow[] currentRows = workTable.Select(
null, null, DataViewRowState.CurrentRows);
if (currentRows.Length < 1 )
Console.WriteLine("No Current Rows Found");
else
{
foreach (DataColumn column in workTable.Columns)
Console.Write("\t{0}", column.ColumnName);
Console.WriteLine("\tRowState");
foreach (DataRow row in currentRows)
{
foreach (DataColumn column in workTable.Columns)
Console.Write("\t{0}", row[column]);
Console.WriteLine("\t" + row.RowState);
}
}
该方法 Select 可用于返回具有不同 RowState 值或字段值的行。 以下示例返回一个 DataRow 数组,该数组引用所有已删除的行,并返回另一个 DataRow 数组,该数组引用所有行(按 CustLName 排序),其中 CustID 列大于 5。 有关如何查看行中 Deleted 的信息,请参阅 行状态和行版本。
' Retrieve all deleted rows.
Dim deletedRows() As DataRow = workTable.Select(Nothing, Nothing, DataViewRowState.Deleted)
' Retrieve rows where CustID > 5, and order by CustLName.
Dim custRows() As DataRow = workTable.Select( _
"CustID > 5", "CustLName ASC")
// Retrieve all deleted rows.
DataRow[] deletedRows = workTable.Select(
null, null, DataViewRowState.Deleted);
// Retrieve rows where CustID > 5, and order by CustLName.
DataRow[] custRows = workTable.Select("CustID > 5", "CustLName ASC");