您可以使用 Find 和 FindRows 方法根據 DataView 的排序索引鍵值來搜尋數據列。 在Find和FindRows方法中,搜尋值的大小寫敏感性由底層的CaseSensitive屬性的DataTable決定。 搜尋值必須符合其整體的現有排序索引鍵值,才能傳回結果。
該方法會回傳一個整數索引,對應於符合搜尋條件的DataRowView。 若有多列符合搜尋條件,則僅回傳第一個匹配 DataRowView 的索引。 若未找到匹配,則 Find 回傳 -1。
若要回傳多列匹配的搜尋結果,請使用以下 FindRows 方法。
FindRows 運作方式與該 Find 方法相同,但會回傳一個 DataRowView 陣列,參考 DataView 中所有相符的列。 若未找到匹配,陣 DataRowView 列將為空。
要使用 Find or FindRows 方法,你必須透過設定 ApplyDefaultSort 或 true 使用 屬性 Sort 來指定排序順序。 如果未指定排序順序,則會拋出例外狀況。
Find與FindRows方法的輸入是一個長度與排序順序欄位數相符的數值陣列。 在單一數據行上排序的情況下,您可以傳遞單一值。 針對包含多個欄位的排序,您可以傳遞物件的陣列。 請注意,對於多欄位的排序,物件陣列中的值必須與 Sort 屬性中欄位的順序相符。
以下程式碼範例展示了 Find 該方法在對 a 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());