尋找資料列

您可以使用 FindFindRowsDataView 方法,依照資料列的排序索引鍵值來搜尋資料列。 FindFindRows 方法內區分大小寫的搜尋值,是由基礎 DataTable 中的 CaseSensitive 屬性所決定的。 搜尋值必須完全符合現有的排序索引鍵值,才能傳回結果。

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

另請參閱