Filtrar desde tabla Data Grid no desde la BD [SOLUCIONADO]

En el mundo del desarrollo de aplicaciones con Visual Basic, una de las tareas más comunes al trabajar con información es mostrar y gestionar grandes cantidades de datos. Para ello, los **Data Grids** se convierten en herramientas indispensables que nos permiten organizar, visualizar y manipular datos de manera eficiente. Una funcionalidad crítica en cualquier aplicación que maneje datos es el **filtrado de la información mostrada en la interfaz gráfica**, permitiendo al usuario centrarse solo en aquellos registros que cumplan con ciertos criterios. No obstante, en ocasiones, queremos realizar este filtrado sin tener que hacer una nueva consulta a la **base de datos**. Este enfoque tiene varias ventajas, como la reducción de la carga en el servidor y la mejora en la velocidad de respuesta en la interfaz de usuario.

En el siguiente contenido, exploraremos cómo aplicar **filtros directamente en un Data Grid en Visual Basic**, sin necesidad de efectuar nuevas consultas a la base de datos. Este método mejora la experiencia del usuario y optimiza el rendimiento de nuestras aplicaciones VB:

Para iniciar, es esencial comprender que un **Data Grid** se apoya generalmente en estructuras de datos en memoria, como pueden ser **DataTables** o **Listas**. Estas estructuras contienen los datos que se muestran en la cuadrícula. Por ende, al aplicar un filtrado, lo que haremos será manipular estos objetos en lugar de interactuar de nuevo con el origen de datos.

Un ejemplo clásico podría ser un formulario con un Data Grid y un **TextBox** que permita al usuario ingresar un filtro. A medida que se introduce el filtro, el contenido del Data Grid cambia. A continuación, se muestra un ejemplo de cómo establecer este tipo de filtros:

Supongamos que tenemos un **DataGridView** que se ha llenado previamente con datos desde una base de datos:

' Carga de datos desde la base de datos al Data Grid (se asume que ya ha sido realizada)
Sub CargarDatos()
    Dim connectionString As String = "tu_cadena_de_conexion"
    Using con As New SqlConnection(connectionString)
        Dim command As New SqlCommand("SELECT * FROM tus_datos", con)
        Dim adapter As New SqlDataAdapter(command)
        Dim table As New DataTable()
        con.Open()
        adapter.Fill(table)
        dataGridView1.DataSource = table
    End Using
End Sub

Ahora, imaginemos que queremos permitir al usuario filtrar por un campo llamado `Nombre`. Podríamos usar el evento `TextChanged` del TextBox de filtro para actualizar los datos que se muestran. En el método asociado a este evento, **aplicaríamos un filtro a DataTable** que se encuentra enlazado al Data Grid:

' Evento TextChanged del TextBox de filtro que invoca al método FiltrarDatosGrid
Private Sub txtFiltroNombre_TextChanged(sender As Object, e As EventArgs) Handles txtFiltroNombre.TextChanged
    FiltrarDatosGrid(txtFiltroNombre.Text)
End Sub

' Método que filtra los datos del Data Grid
Sub FiltrarDatosGrid(filtro As String)
    ' Obtenemos el DataTable del Data Grid
    Dim dt As DataTable = CType(dataGridView1.DataSource, DataTable)

    ' Filtramos los datos utilizando el método Select de DataTable
    dt.DefaultView.RowFilter = String.Format("Nombre LIKE '%{0}%'", filtro)
End Sub

En el código anterior, `txtFiltroNombre` es el **TextBox** donde el usuario escribe su filtro y `dataGridView1` es nuestro Data Grid. Utilizamos el método `DefaultView.RowFilter` de `DataTable` para especificar una cláusula de filtro, la cual actúa de manera análoga a la cláusula `WHERE` en una consulta SQL sobre el objeto en memoria.

Es importante destacar que, al filtrar **directamente en la interfaz de usuario**, evitamos la sobrecarga que implica hacer una nueva consulta a la base de datos y procesarla. Además, la respuesta es inmediata, lo cual brinda una experiencia de uso más ágil y fluida.

Es esencial señalar también que al aplicar estos **filtros dinámicos**, debemos estar atentos a la posibilidad de que los filtros generen expresiones no válidas o errores en tiempo de ejecución. Por lo tanto, es una excelente práctica envolver el código de filtrado dentro de un bloque `Try…Catch` para manejar adecuadamente estas situaciones:

Sub FiltrarDatosGrid(filtro As String)
    Try
        ' Obtenemos el DataTable del Data Grid
        Dim dt As DataTable = CType(dataGridView1.DataSource, DataTable)

        ' Filtramos los datos utilizando el método Select de DataTable
        If String.IsNullOrWhiteSpace(filtro) Then
            dt.DefaultView.RowFilter = String.Empty
        Else
            dt.DefaultView.RowFilter = String.Format("Nombre LIKE '%{0}%'", filtro)
        End If
    Catch ex As Exception
        MessageBox.Show("Error al aplicar el filtro: " & ex.Message)
    End Try
End Sub

En este fragmento hemos agregado un condicional que elimina el filtro si el cuadro de texto está vacío, y hemos envuelto la lógica dentro de un `Try…Catch` para capturar y manejar cualquier excepción que pudiera suceder.

Existen muchas otras formas de **mejorar la interacción con los usuarios** utilizando un Data Grid. Por ejemplo, podríamos ofrecer opciones de filtrado avanzado y combinar varios filtros. También podríamos permitir el ordenamiento de columnas o implementar **paginación de datos** para manejar de manera eficiente conjuntos de datos de gran tamaño.

Algo importante a tener en cuenta es que el rendimiento del filtrado aplicado directamente en los Data Grids depende significativamente del volumen de datos que manejan. Para conjuntos de datos muy grandes, podríamos necesitar técnicas adicionales para garantizar una respuesta ágil, como cargar los datos en segmentos o utilizar estructuras más optimizadas para la búsqueda y filtrado de la información.

Finalmente, cabe mencionar que el ejemplo expuesto es una base para empezar a trabajar con filtrado en Data Grids en Visual Basic. Deberás adaptar y expandir este código según las necesidades específicas de tu aplicación, siempre rigiéndote por las “mejores prácticas”, como la protección ante inyecciones de código y la oferta de una interfaz intuitiva para el usuario.

El filtrado de datos directamente en los controles de interfaz, como los Data Grids, es una práctica común que, cuando se realiza adecuadamente, contribuye al desarrollo de aplicaciones robustas, intuitivas y eficientes. Con las pautas y códigos proporcionados, estarás en camino de implementar esta útil característica en tus aplicaciones Visual Basic, mejorando la experiencia usuario y el rendimiento de la aplicación. Con el manejo adecuado del filtrado **in situ**, tu software se diferencia por ser más interactivo y receptivo a las necesidades del usuario.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad