DataTable 内のデータの表示

更新 : November 2007

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

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

kcs3hdk5.alert_note(ja-jp,VS.90).gifヒント :

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

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

DataViewRowState の値

説明

CurrentRows

変更されていない行、追加された行、および変更された行を含む現在の行。

Deleted

削除された行。

ModifiedCurrent

元のデータを変更した後のバージョンである、現在のバージョン。ModifiedOriginal を参照してください。

ModifiedOriginal

変更されたすべての行の元のバージョン。現在のバージョンは、ModifiedCurrent. を使用して取得できます。

Added

新しい行。

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 配列を返し、また、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 内のデータの操作