Compartir a través de


Buscar filas

Es posible buscar filas en función de los valores clave de ordenación mediante los métodos Find y FindRows de la DataView. La diferenciación entre mayúsculas y minúsculas de los valores de búsqueda en los métodos Find y FindRows está determinada por la propiedad CaseSensitive de la DataTable subyacente. Los valores de búsqueda deben coincidir en su totalidad con los valores de clave de ordenación existentes para que se devuelva un resultado.

El método Find devuelve un entero con el índice de la DataRowView que coincide con los criterios de búsqueda. Si más de una fila coincide con los criterios de búsqueda, sólo se devolverá el índice de la primera DataRowView coincidente. Si no se encuentra ninguna coincidencia, Find devuelve -1.

Para devolver resultados de la búsqueda que coincidan con varias filas, utilice el método FindRows. FindRows funciona igual que el método Find, excepto en que devuelve una matriz de DataRowView que hace referencia a todas las filas coincidentes de la DataView. Si no se encuentra ninguna coincidencia, la matriz de DataRowView estará vacía.

Para utilizar los métodos Find o FindRows debe especificar un criterio de ordenación; para ello, establezca ApplyDefaultSort como true o utilice la propiedad Sort. Si no se especifica ningún criterio de ordenación, se inicia una excepción.

Los métodos Find y FindRows toman como entrada una matriz de valores cuya longitud coincide con el número de columnas del criterio de ordenación. En el caso de una ordenación por una única columna, puede pasar un único valor. Para los criterios de ordenación que contienen varias columnas, debe pasar una matriz de objetos. Tenga en cuenta que para una ordenación según varias columnas, los valores de la matriz de objetos deben coincidir con el orden de las columnas especificado en la propiedad Sort de DataView.

En el siguiente ejemplo de código se muestra una llamada al método Find en una DataView con un criterio de ordenación de una única columna.

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

Si la propiedad Sort especifica varias columnas, debe pasar una matriz de objetos con los valores de búsqueda de cada columna en el orden especificado por la propiedad Sort, como en el siguiente ejemplo 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());  

Consulte también