查看数据表中的数据

更新:November 2007

可以使用 DataTableRowsColumns 集合来访问 DataTable 中的内容。 也可以根据包括搜索条件、排序顺序和行状态在内的特定条件,使用 Select 方法返回 DataTable 中数据的子集。 此外,在使用主键值搜索特定行时,还可以使用 DataRowCollectionFind 方法。

DataTable 对象的 Select 方法返回一组与指定条件匹配的 DataRow 对象。 Select 接受筛选表达式、排序表达式和 DataViewRowState 的可选参数。 筛选表达式根据 DataColumn 值(例如 LastName = 'Smith')标识要返回的行。 排序表达式遵循用于为列排序的标准 SQL 约定,例如 LastName ASC, FirstName ASC。 有关编写表达式的规则,请参见 DataColumn 类的 Expression 属性。

提示:

如果将对 DataTableSelect 方法执行多次调用,可以先为 DataTable 创建 DataView 以提高性能。 创建 DataView 会为表中的行编制索引。 然后,Select 方法会使用该索引,这样将显著缩短生成查询结果的时间。 有关为 DataTable 创建 DataView 的信息,请参见DataView (ADO.NET)

Select 方法基于 DataViewRowState 确定要查看或处理的行的版本。 下表说明了可能的 DataViewRowState 枚举值。

DataViewRowState 值

说明

CurrentRows

当前行,包括未更改的行、已添加的行和已修改的行。

Deleted

已删除的行。

ModifiedCurrent

当前版本,它是原始数据的修改版本 (请参见 ModifiedOriginal)。

ModifiedOriginal

所有已修改行的原始版本。 使用 ModifiedCurrent 可以获得当前版本。

Added

新行。

None

无。

OriginalRows

原始行,包括未更改的行和已删除的行。

Unchanged

未更改的行。

在下面的示例中,DataSet 对象已经过筛选,这样,您可以只使用其 DataViewRowState 设置为 CurrentRows 的行。

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 数组,并返回另一个引用所有按 CustLName 排序的行(其中 CustID 列大于 5)的 DataRow 数组。有关如何在 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");

请参见

概念

行状态与行版本

参考

DataRow

DataSet

DataTable

DataViewRowState

其他资源

在 DataTable 中处理数据