次の方法で共有


テーブル内のデータの表示

DataTable の内容には、DataTableRows コレクションと Columns コレクションを使用してアクセスできます。また、DataTable.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 列挙値の説明を次の表に示します。

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

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

Dim myCol As DataColumn
Dim myRow As DataRow

Dim currRows() As DataRow = workTable.Select(Nothing, Nothing, DataViewRowState.CurrentRows)

If (currRows.Length < 1 ) Then
  Console.WriteLine("No Current Rows Found")
Else
  For Each myCol in workTable.Columns
    Console.Write(vbTab & myCol.ColumnName)
  Next

  Console.WriteLine(vbTab & "RowState")

  For Each myRow In currRows
    For Each myCol In workTable.Columns
      Console.Write(vbTab & myRow(myCol).ToString())
    Next

    Dim rowState As String = System.Enum.GetName(myRow.RowState.GetType(), myRow.RowState)
    Console.WriteLine(vbTab & rowState)
  Next
End If
[C#]
DataRow[] currRows = workTable.Select(null, null, DataViewRowState.CurrentRows);

if (currRows.Length < 1 )
  Console.WriteLine("No Current Rows Found");
else
{
  foreach (DataColumn myCol in workTable.Columns)
    Console.Write("\t{0}", myCol.ColumnName);

  Console.WriteLine("\tRowState");

  foreach (DataRow myRow in currRows)
  {
    foreach (DataColumn myCol in workTable.Columns)
      Console.Write("\t{0}", myRow[myCol]);

    Console.WriteLine("\t" + myRow.RowState);
  }
}

Select メソッドを使用して、異なる RowState 値またはフィールド値を持つ行を返すこともできます。削除されたすべての行を参照する DataRow 配列を返し、また、CustID 列が 5 より大きいすべての行を CustLName に基づいて並べ替えた別の DataRow 配列も返す例を次に示します。Deleted 行の情報を表示する方法については、「行の状態とバージョン」を参照してください。

' Retrieve all deleted rows.
Dim delRows() 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")
[C#]
// Retrieve all deleted rows.
DataRow[] delRows = workTable.Select(null, null, DataViewRowState.Deleted);

// Retrieve rows where CustID > 5, and order by CustLName.
DataRow[] custRows = workTable.Select("CustID > 5", "CustLName ASC");

参照

DataTable 内のデータの操作 | 行の状態とバージョン | DataRow クラス | DataSet クラス | DataTable クラス | DataViewRowState 列挙体