在 DataTable 中查看数据

可以使用 RowsColumns 集合来访问 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");

另请参阅