Filtros en datagriview

27/05/2010 - 22:30 por Elisa | Informe spam
Hola grupo,

Tengo que hacer filtros sobre todos los campos de un datagridview, mi
pregunta es si se puede hacer de alguna forma que trabaje como los filtros
del EXCEL.


Muchísimas gracias,
 

Leer las respuestas

#1 SoftJaén
28/05/2010 - 17:12 | Informe spam
"Elisa" preguntó:

Tengo que hacer filtros sobre todos los campos de un datagridview, mi
pregunta es si se puede hacer de alguna forma que trabaje como los
filtros del EXCEL.



Hola, Elisa:

Como los filtros de Microsoft Excel, me parece a mí que va a ser que no. :-)

Si el control DataGridView se encuentra enlazado a un objeto DataTable,
puedes utilizar el método «Select» de dicho objeto para seleccionar las
filas que coincidan con un criterio particular.

Por ejemplo, imagina que tienes la tipica tabla de Clientes, y deseas
obtener aquellos cuyo Nombre comience por «Talleres». Simplemente
ejecutarías:

Private Sub Button1_Click( _
ByVal sender As Object, _
ByVal e As EventArgs) Handles Button1.Click

' Referenciamos el objeto asociado
' con el control DataGridView.
'
Dim source As Object = DataGridView1.DataSource

Dim dt As DataTable = Nothing

If (TypeOf (source) Is DataView) Then
dt = DirectCast(source, DataView).Table

ElseIf (TypeOf (source) Is DataTable) Then
dt = DirectCast(source, DataTable)

Else
' Es otro origen de datos diferente.
Return
End If

Dim dv As DataView = GetDataView(dt, "Nombre Like 'Talleres%'")

If (dv Is Nothing) Then
' No hay ningún registro coincidente;
' el control DataGridView estará enlazado
' al objeto DataTable general.
'
DataGridView1.DataSource = m_dt

Else
' Hay registros; enlazo el control
' DataGridView con el objeto DataView.
'
DataGridView1.DataSource = dv
End If

End Sub


Para conocer los filtros de expresión que puedas utilizar, abre la ayuda de
Visual Studio y busca la propiedad Expression de la clase DataColumn.

El ejemplo asume a que a nivel del formulario tienes declarada la siguiente
variable objeto:

Private m_dt As DataTable

Dicha variable objeto será la que en principio estará enlazada con el
control DataGridView, así como cuando no existan registros que cumplan con
el criterio de filtro especificado.

Verás que utilizo una función llamada GetDataView, que como su nombre
indica, devuelve un objeto DataView con el resultado de aplicar el filtro
especificado. Dicha función sería la siguiente:

Private Function GetDataView( _
ByVal dt As DataTable, _
ByVal filterExpression As String) As DataView

' Verificamos los valores pasados.
'
If (dt Is Nothing) OrElse _
(filterExpression = String.Empty) Then _
Return Nothing

' Seleccionamos los registros de clientes
' cuyo nombre comienze por ACEITES
'
Dim rows() As DataRow = dt.Select(filterExpression)

' Si no existen registros, abandonamos
' el procedimiento.
'
If (rows.Length = 0) Then Return Nothing

' Clonamos el objeto DataTable.
'
Dim dtTemp As DataTable = dt.Clone()

' Añadimos los regitros seleccionados al
' objeto DataTable clonado.
'
For Each row As DataRow In rows
dtTemp.ImportRow(row)
Next

' Devolvemos el objeto DataView
'
Return New DataView(dtTemp)

End Function

¡En fin! Adapta el ejemplo a tus necesidades.

Un saludo

Enrique Martínez
[MS MVP - VB]

Preguntas similares