查找行 (ADO.NET)

更新:November 2007

可以使用 DataViewFindFindRows 方法,根据排序关键字值搜索行。 FindFindRows 方法中的搜索值是否区分大小写取决于基础 DataTableCaseSensitive 属性。 搜索值必须完全匹配现有排序关键字值才能返回结果。

Find 方法返回一个整数,该整数表示匹配搜索条件的 DataRowView 的索引。 如果多个行匹配搜索条件,则只返回第一个匹配 DataRowView 的索引。 如果未找到匹配项,Find 将返回 -1。

若要返回匹配多个行的搜索结果,可以使用 FindRows 方法。 FindRows 的工作方式与 Find 方法类似,不同的只是前者返回引用 DataView 中所有匹配行的 DataRowView 数组。 如果未找到匹配项,DataRowView 数组将为空。

若要使用 FindFindRows 方法,必须通过将 ApplyDefaultSort 设置为 true 或通过使用 Sort 属性来指定排序顺序。 如果未指定排序顺序,则将引发异常。

FindFindRows 方法将一个值数组用作输入,该数组的长度与排序顺序所包含的列数相匹配。 在对单个列进行排序的情况下,可以传递单个值。 对于包含多个列的排序顺序,可传递一个对象数组。 请注意,当对多个列进行排序时,对象数组中的值必须匹配在 DataViewSort 属性中指定的列的顺序。

以下代码示例显示对具有单个列排序顺序的 DataView 调用的 Find 方法。

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());

请参见

参考

DataTable

DataView

其他资源

DataView (ADO.NET)