Partilhar via


Localizando linhas

Você pode pesquisar linhas de acordo com seus valores de chave de classificação usando os Find métodos e FindRows do DataView. A diferenciação de maiúsculas e minúsculas dos valores de pesquisa nos métodos Find e FindRows é determinada pela propriedade CaseSensitive 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 método Find retorna um inteiro com o índice do que corresponde aos critérios de DataRowView pesquisa. Se mais de uma linha corresponder aos critérios de pesquisa, somente o índice do primeiro DataRowView correspondente será retornado. Se nenhuma correspondência for encontrada, Find retornará -1.

Para retornar resultados de pesquisa que correspondam a várias linhas, use o método FindRows. FindRows funciona exatamente como o método Find , exceto que ele retorna uma matriz DataRowView que faz referência a todas as linhas correspondentes no DataView. Se nenhuma correspondência for encontrada, a matriz DataRowView estará vazia.

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

Os métodos Find e FindRows usam uma matriz de valores como entrada cujo comprimento corresponde ao número de colunas na ordem de classificaçã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, você passa uma matriz de objetos. Observe que, para uma classificação em várias colunas, os valores na matriz de objetos devem corresponder à ordem das colunas especificadas na propriedade Sort do DataView.

O exemplo de código a seguir mostra o método Find sendo chamado em relação a um DataView com uma única ordem de classificação de 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 sua propriedade Sort especificar várias colunas, você deverá passar uma matriz de objetos com os valores de pesquisa para cada coluna na ordem especificada pela propriedade Sort , como no exemplo de código a seguir.

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

Consulte também