次の方法で共有


DataTable 内のデータの表示

DataTable の内容には、DataTableRows コレクションと Columns コレクションを使用してアクセスできます。 また、Select メソッドを使用すると、検索条件、並べ替え順序、行の状態などの基準に基づいて DataTable 内のデータのサブセットを返すことができます。 さらに、主キー値を使用して特定の行を検索するときは、DataRowCollectionFind メソッドを使用できます。

DataTable オブジェクトの Select メソッドからは、指定した条件と一致する DataRow オブジェクトのセットが返されます。 Select は、オプションの引数として、フィルター式、並べ替え式、DataViewRowState を受け取ります。 フィルター式では、DataColumn の値に基づいて返す行が特定されます (LastName = 'Smith' など)。 並べ替え式は、列の並べ替えについての標準 SQL 規則に基づく LastName ASC, FirstName ASC などの式です。 式の記述の規則については、DataColumn クラスの Expression プロパティのトピックを参照してください。

ヒント

DataTableSelect メソッドへの呼び出しを多数実行する場合は、最初に DataTableDataView を作成することにより、パフォーマンスを向上させることができます。 DataView を作成すると、テーブルの行にインデックスが付けられます。 Select メソッドでそのインデックスを使用すると、クエリ結果を生成するまでの時間が大幅に短縮されます。 DataTableDataView を作成する方法については、「DataView」を参照してください。

Select メソッドでは、DataViewRowState に基づいて、表示または操作する行のバージョンが決定されます。 有効な DataViewRowState 列挙値の説明を次の表に示します。

DataViewRowState の値 説明
CurrentRows 変更されていない行、追加された行、および変更された行を含む現在の行。
削除済み 削除された行。
ModifiedCurrent 元のデータを変更した後のバージョンである、現在のバージョン。 (ModifiedOriginal を参照)
ModifiedOriginal 変更されたすべての行の元のバージョン。 現在のバージョンは、ModifiedCurrent を使用して取得できます。
追加 新しい行。
None なし。
OriginalRows 変更されていない行および削除された行を含む元の行。
Unchanged 変更されていない行。

次の例では、DataSet オブジェクトをフィルター処理して、DataViewRowStateCurrentRows に設定されている行だけを操作できるようにします。

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 配列と、CustID 列が 5 より大きいすべての行 (CustLName の順に並べ替えられたもの) を参照する別の 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");

関連項目