查看数据表中的数据
可以使用 DataTable 的 Rows 和 Columns 集合来访问 DataTable 中的内容。 也可以根据包括搜索条件、排序顺序和行状态在内的特定条件,使用 Select 方法返回 DataTable 中数据的子集。 此外,在使用主键值搜索特定行时,还可以使用 DataRowCollection 的 Find 方法。
DataTable 对象的 Select 方法返回一组与指定条件匹配的 DataRow 对象。 Select 接受筛选表达式、排序表达式和 DataViewRowState 的可选自变量。 筛选表达式根据 DataColumn 值(例如 LastName = 'Smith'
)标识要返回的行。 排序表达式遵循用于为列排序的标准 SQL 约定,例如 LastName ASC, FirstName ASC
。 有关编写表达式的规则,请参阅 DataColumn 类的 Expression 属性。
提示
如果将对 DataTable 的 Select 方法执行多次调用,可以先为 DataTable 创建 DataView 以提高性能。 创建 DataView 会为表中的行编制索引。 然后,Select 方法会使用该索引,这样将显著缩短生成查询结果的时间。 有关为 DataTable 创建 DataView 的信息,请参见 DataView。
Select 方法基于 DataViewRowState 确定要查看或处理的行的版本。 下表说明了可能的 DataViewRowState 枚举值。
DataViewRowState 值 | 说明 |
---|---|
CurrentRows | 当前行,包括未更改的行、已添加的行和已修改的行。 |
已删除 | 已删除的行。 |
ModifiedCurrent | 当前版本,它是原始数据的修改版本。 (请参见 ModifiedOriginal)。 |
ModifiedOriginal | 所有已修改行的原始版本。 使用 ModifiedCurrent 可以获得当前版本。 |
已添加 | 新行。 |
无 | 无。 |
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 数组。 若要了解如何查看“已删除”行中的信息,请参阅行状态和行版本。
' 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");