Partilhar via


Localizando linhas

Você pode pesquisar linhas de acordo com seus valores de chave de classificação usando os métodos Find e FindRows do DataView. A sensibilidade ao caso dos valores de pesquisa nos Find métodos e FindRows é determinada pela CaseSensitive propriedade do subjacente DataTable. Os valores de pesquisa devem corresponder aos valores de chave de classificação existentes em sua totalidade para retornar um resultado.

O Find método devolve um número inteiro com o índice de DataRowView que corresponde aos critérios de pesquisa. Se mais do que uma linha corresponder aos critérios de pesquisa, apenas o índice da primeira correspondência DataRowView é devolvido. Se não forem encontradas correspondências, Find retorna -1.

Para devolver resultados de pesquisa que correspondam a várias linhas, use o FindRows método. FindRows funciona exatamente como o Find método, exceto que devolve um DataRowView array que faz referência a todas as linhas correspondentes na DataView. Se não forem encontradas correspondências, o DataRowView array ficará vazio.

Para usar os Find métodos ou FindRows , deve especificar uma ordem de ordenação, seja definindo ApplyDefaultSort como true ou usando a Sort propriedade. Se nenhuma ordem de classificação for especificada, uma exceção será lançada.

Os métodos Find e FindRows recebem um array de valores como entrada cujo tamanho corresponde ao número de colunas na ordem de ordenação. No caso de uma classificação em uma única coluna, você pode passar um único valor. Para ordens de classificação contendo várias colunas, introduz-se uma matriz de objetos. Note que, para uma ordenação em múltiplas colunas, os valores no array de objetos devem corresponder à ordem das colunas especificadas na Sort propriedade do DataView.

O seguinte exemplo de código mostra o Find método a ser chamado contra a DataView com uma ordem de ordenação de uma única coluna.

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

Se a sua Sort propriedade especificar múltiplas colunas, deve passar um array de objetos com os valores de pesquisa para cada coluna na ordem especificada pela Sort propriedade, como no seguinte exemplo de código.

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

Ver também