在 DataTable 中查看数据

可以使用 DataTable“行”和“列”集合访问 a 的内容。 还可以使用 Select 该方法根据搜索条件、排序顺序和行状态等条件返回 DataTable 中的数据子集。 此外,在使用主键值搜索特定行时,可以使用 FindDataRowCollection 的方法。

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

小窍门

如果要对 DataTableSelect 方法执行多次调用,可以先为 DataView 创建一个,从而提高性能。 创建 DataView 时会为表中的行创建索引。 然后 ,Select 方法使用该索引,显著缩短生成查询结果的时间。 有关为 DataTable 创建 DataView 的信息,请参阅 DataViews

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

DataViewRowState 值 DESCRIPTION
CurrentRows 当前行,包括未更改、添加和修改的行。
已删除 已删除的行。
ModifiedCurrent 当前版本,它是原始数据的修改版本。 (请参阅 ModifiedOriginal
ModifiedOriginal 所有已修改行的原始版本。 当前版本使用 ModifiedCurrent 提供。
已添加 新行。
没有 没有。
OriginalRows 原始行,包括未更改的行和已删除的行。
不变 未更改的行。

在以下示例中,将筛选 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 数组,该数组引用所有已删除的行,并返回另一个 DataRow 数组,该数组引用所有行(按 CustLName 排序),其中 CustID 列大于 5。 有关如何查看 已删除 行中的信息,请参阅 行状态和行版本

' 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");

另请参阅