Поделиться через


Поиск строк

При помощи методов Find и FindRows объекта DataView можно производить поиск строк по значениям их ключей сортировки. Конфиденциальность регистра значений поиска в методах Find и FindRows определяется свойством CaseSensitive базового DataTableобъекта. Чтобы был возвращен результат, значения для поиска должны полностью совпадать со значениями ключей сортировки.

Метод Find возвращает целое число с индексом DataRowView , соответствующим условиям поиска. Если несколько строк соответствуют критериям поиска, возвращается только индекс первого соответствующего объекта DataRowView . Если совпадения не найдены, функция "Найти " возвращает значение -1.

Чтобы вернуть результаты поиска, соответствующие нескольким строкам, используйте метод FindRows . FindRows работает так же, как метод Find, за исключением того, что он возвращает массив DataRowView, который ссылается на все соответствующие строки в DataView. Если совпадения не найдены, массив DataRowView будет пустым.

Чтобы использовать методы Find или FindRows, необходимо указать порядок сортировки либо путем задания ApplyDefaultSort значение true, либо с помощью свойства Sort. Если никакого порядка сортировки не задано, то формируется исключение.

Методы Find и FindRows принимают массив значений в качестве входных данных, длина которых соответствует количеству столбцов в порядке сортировки. В случае сортировки в одном столбце можно передавать одно значение. Массив объектов передается для порядков сортировки, содержащих несколько столбцов. Обратите внимание, что для сортировки по нескольким столбцам значения в массиве объектов должны соответствовать порядку столбцов, указанных в свойстве Sort объекта DataView.

В следующем примере кода показан метод 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());  

См. также