Filtrar datos en un DataTableUna variante a la utilizacion de DataView y el método SelectFecha:
28/Jun/2005 (28-06-2005)
|
Usualmente cuando trabajamos con un objeto DataTable, nos vemos en la necesidad de filtrar los datos del mismo. Para esto podemos usar un DataView, asociado al DataTable, o utilizar el método Select() del DataTable para retornar un set de datos, aplicándoles un criterio.
El único inconveniente que posee el método Select() , es que retorna un Array de DataRow . La forma usual de trabajar con este método seria
Sub Sample1()
Dim dt As DataTable Dim sort As String Dim filter As String Dim rows As DataRow() ' get data dt = getdata()
' sort and filter data rows = dt.Select(filter, sort) ' work with selected rows For Each dr As DataRow In rows ' some work Next End Sub
Sin embargo, ya que Ado.Net nos brinda un modelo de objetos más que poderoso, parece poco apropiado trabajar con un Array.
Una solución que cree para este problema, fue la siguiente función
Function SelectDataTable(ByVal dt As DataTable, ByVal filter As String, ByVal sort As String) As DataTable
Dim rows As DataRow()
Dim dtNew As DataTable
' copy table structure
dtNew = dt.Clone()
' sort and filter data
rows = dt.Select(filter, sort)
' fill dtNew with selected rows
For Each dr As DataRow In rows
dtNew.ImportRow(dr)
Next
' return filtered dt
Return dtNew
End Function
La misma aplica un filtro en una DataTable y con el Array de DataRow que retorna, crea una nueva tabla y la retorna. El código del primer ejemplo, quedaría de la siguiente manera
Sub Sample2()
Dim dt As DataTable
Dim dtNew As DataTable
' get data
dt = getdata()
' sort and filter data
dtNew = SelectDataTable(dt, "Filter", "sort")
' work with selected rows
For Each dr As DataRow In dtNew.Rows
' some work
Next
End Sub
Otra opción es heredar de DataTable y agregar este método :D.
En la nueva versión de Ado.Net, este problema estará solucionado (eso espero).
Sino podemos votarlo en el site de feedback para productos Microsoft -->
http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=5421ba0b-0474-41c4-ac6f-8ce226b28ae8
Ante cualquier duda, pueden escribirme a [email protected]
Saludos
El Bruno
http://spaces.msn.com/members/brunocapuano.