次の方法で共有


行の検索

FindFindRowsメソッドとDataViewメソッドを使用して、並べ替えキーの値に従って行を検索できます。 FindメソッドおよびFindRows メソッドでの検索値の大文字と小文字の区別は、基になるCaseSensitiveDataTable プロパティによって決まります。 結果を返すには、検索値が既存の並べ替えキーの値と完全に一致している必要があります。

Find メソッドは、検索条件に一致するDataRowViewのインデックスを持つ整数を返します。 複数の行が検索条件と一致する場合は、最初に一致する DataRowView のインデックスのみが返されます。 一致が見つからない場合、 Find は -1 を返します。

複数の行に一致する検索結果を返すには、 FindRows メソッドを使用します。 FindRowsFindメソッドと同じように機能しますが、DataRowView 内のすべての一致する行を参照する配列が返される点が異なります。 一致が見つからない場合、 DataRowView 配列は空になります。

FindメソッドまたはFindRowsメソッドを使用するには、ApplyDefaultSorttrueに設定するか、Sort プロパティを使用して並べ替え順序を指定する必要があります。 並べ替え順序が指定されないと、例外がスローされます。

FindメソッドとFindRows メソッドは、値の配列を入力として受け取り、その長さが並べ替え順序の列数と一致します。 1 つの列に対する並べ替えの場合は、1 つの値を渡すことができます。 複数の列を含む並べ替え順序の場合は、オブジェクトの配列を渡します。 複数の列を並べ替える場合、オブジェクト配列内の値はSort プロパティで指定された列の順序と一致する必要があることに注意してください。

次のコード例は、1 つの列の並べ替え順序でFindに対して呼び出されるDataView メソッドを示しています。

Dim custView As DataView = _
  New DataView(custDS.Tables("Customers"), "", _
  "CompanyName", DataViewRowState.CurrentRows)

Dim rowIndex As Integer = custView.Find("The Cracker Box")

If rowIndex = -1 Then
  Console.WriteLine("No match found.")
Else
  Console.WriteLine("{0}, {1}", _
    custView(rowIndex)("CustomerID").ToString(), _
    custView(rowIndex)("CompanyName").ToString())
End If
DataView custView = new DataView(custDS.Tables["Customers"], "",
  "CompanyName", DataViewRowState.CurrentRows);

int rowIndex = custView.Find("The Cracker Box");

if (rowIndex == -1)
  Console.WriteLine("No match found.");
else
  Console.WriteLine("{0}, {1}",
    custView[rowIndex]["CustomerID"].ToString(),
    custView[rowIndex]["CompanyName"].ToString());

Sort プロパティで複数の列を指定する場合は、次のコード例のように、Sort プロパティで指定された順序で各列の検索値を持つオブジェクト配列を渡す必要があります。

Dim custView As DataView = _
  New DataView(custDS.Tables("Customers"), "", _
  "CompanyName, ContactName", _
  DataViewRowState.CurrentRows)

Dim foundRows() As DataRowView = _
  custView.FindRows(New object() {"The Cracker Box", "Liu Wong"})

If foundRows.Length = 0 Then
  Console.WriteLine("No match found.")
Else
  Dim myDRV As DataRowView
  For Each myDRV In foundRows
    Console.WriteLine("{0}, {1}", _
      myDRV("CompanyName").ToString(), myDRV("ContactName").ToString())
  Next
End If
DataView custView = new DataView(custDS.Tables["Customers"], "",
  "CompanyName, ContactName",
  DataViewRowState.CurrentRows);

DataRowView[] foundRows =
  custView.FindRows(new object[] {"The Cracker Box", "Liu Wong"});

if (foundRows.Length == 0)
  Console.WriteLine("No match found.");
else
  foreach (DataRowView myDRV in foundRows)
    Console.WriteLine("{0}, {1}", myDRV["CompanyName"].ToString(),
      myDRV["ContactName"].ToString());

こちらも参照ください