Поиск строк

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

Метод Find возвращает целое число с индексом DataRowView , соответствующим условиям поиска. Если несколько строк соответствуют критериям поиска, возвращается только индекс первого сопоставления DataRowView . Если совпадения не найдены, Find возвращает значение -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());

См. также