Buscar en DataView
Con los métodos Find y FindRows de DataView puede buscar filas según sus valores de clave de ordenación. 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, puede utilizar 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
[C#]
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
[C#]
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());
Vea también
Ver datos mediante DataView | Crear y utilizar DataViews | DataTable (Clase) | DataView (Clase)