Blog de Jorge Pedraza

julio 5, 2010

Busquedas en DataGridView

Filed under: Aplicaciones Windows — JorgePedraza @ 5:47 am
Tags: , , , ,

Hola, la presente intenta mostrar un procedimiento de interés relacionado con ADO.NET. Cuando se trabaja con aplicaciones de base datos se puede apreciar un gran porcentaje el uso de filtrado de datos, para  el cual se va citar un clásico escenario de búsqueda rápida de filas dentro de un control DataGridView.

Dicho escenario es una aplicación Windows donde contiene controles sensibles a datos, tal es el caso del DataGridView, además de poseer un mecanismo de vinculación y gestión de datos. En esta aplicación se establece otros elementos de interés como caja de texto y etiqueta. El manejo de la aplicación se basa en introducir un criterio de búsqueda aproximado o exacto dentro de determinada caja de texto, y de acuerdo a la primera coincidencia se establece como resultado la selección dinámica de la fila contenida dentro del control DataGridView.

BRDGV
Requisitos:

  • .NET Framework 2.0 o superior.
  • Motor de Base de Datos Sql Server 2005 o superior.
  • Experiencia base con la capa ADO.NET 2.0 o superior.
  • Fundamento de Base de datos Sql Server 2005 o Superior.

Puntos relacionados con este tema:

  • DataAdapter: Representa el objeto encargado de procesa información entre determinado origen y destino de datos. Para fine del tema se va utiliza la clase SqlDataAdapter enfocado en base de datos Sql Server.
  • DataTable: Represente la réplica virtual de una tabla de cierto origen o estructura personalizada de datos.
  • DefaultView: Obtiene una vista personalizada de un Datatable que puede incluir una vista filtrada o una posición del cursor
  • DataGridView: Representa el control base en forma de cuadricula para la visualización y gestión de datos vinculado en determinado DataTable.
  • Windows Forms: Es el control principal de interfaz grafica que actúa como contenedor de controles de gestión de usuario.

Descripción del Algoritmo para Búsqueda rápida de fila en un control DataGridView:

  1. Se declara 3 variables:
    • Posicion del  tipo Integer,  el cual representa la posición de un registro.
    • Ncolumn del tipo String,  el cual representa el nombre de columna para filtro.
    • Strsort del tipo String, el cual representa el nombre de columna para Ordenar.
  2. Se actualiza el valor de la variable Strsort según el caso selectivo de la columna establecida para la ordenación.
  3. El valor de la variable Strsort se pasa al método Sort de la vista del DataTable que está vinculado al objeto DataGridview.
  4. Se crea un DataTable temporal llamado tablaT desde la vista actualizada.
  5. Se declara un arreglo de DataRow llamado filas, el cual se llenara a partir de la selección de determinados registros en base a un criterio, bien sea aproximado o exacto.
  6. Se consulta la longitud de dicho arreglo, para determinar  el índice del primer DataRow y fijarlo en la variable posición.
  7. Se escribe un bloque condicional para seleccionar o no la fila del DataGridView en base al valor de la variable posición.

Descripción del codigo fuente relacionado con el Algoritmo:

Dim dtpersonas As New Data.DataTable ‘Datatable especifico para Almacenar datos.
Dim columna As Integer = 0 ‘Valor numero de la columna del DataGridView.
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtBuscar.TextChanged
If txtBuscar.Text <> «» Then ‘Verifica que la caja de texto no este vacia

        Dim posicion As Integer = –1 1
Dim Ncolumn As String = DataGridView1.Columns(columna).Name ‘Obtiene el Nombre de Columna actual del DataGridView.
Dim Strsort As String = «»

        Select Case DataGridView1.Columns(columna).HeaderCell.SortGlyphDirection ‘Obtiene nivel de ordenación establecido sobre la columna del DataGridView. 2
Case SortOrder.Ascending ‘En Caso de ser Ascendente
Strsort = Ncolumn & » Asc» ‘Se fija el nombre de columna y la marca Asc
Case SortOrder.Descending ‘En Caso de ser Descendente
Strsort = Ncolumn & » Desc» ‘Se fija el nombre de columna y la marca Desc
End Select

        dtpersonas.DefaultView.Sort = Strsort ‘Se Actualiza la vista segun el nivel de ordenación establecido. 3
Dim tablaT As DataTable = dtpersonas.DefaultView.ToTable ‘Se crea un DataTable temporal en base a la Vista del DataTable Actual. 4
Dim filas() As DataRow = tablaT.Select(DataGridView1.Columns(columna).Name & » like ‘» & txtBuscar.Text & «%'») ‘Se establece y ejecuta filtro de llenado de arreglo de DataRow. 5

        If filas.Length > 0 Then posicion = tablaT.Rows.IndexOf(filas(0)) ‘Se establece en la variable posicion el Indice de la primera fila del arreglo del DataRow desde tablaT. 6

        If posicion > -1 Then ‘Verifica que posicion es mayor –1.7
DataGridView1.Item(columna, posicion).Selected = True ‘Caso verdadero se selecciona la fila del DataGridView.
Else
DataGridView1.Item(columna, DataGridView1.CurrentRow.Index).Selected = False ‘Caso falso se Deselecciona la fila del DataGridView.
        End If

    Else
        DataGridView1.Item(columna, DataGridView1.CurrentRow.Index).Selected = False ‘En caso de Caja de texto de Busqueda este vacio, se Deselecciona la fila del DataGridView.
End If

End Sub

Nota Importante: Algo que no se está incluyendo en este tema, es la validación de la entrada de datos relacionado con el criterio de búsqueda. Y esto se debe a que  el procedimiento planteado esta susceptible a errores con la introducción de instrucciones o caracteres especiales por ejemplo: %, ‘, $, etc. Para el cual queda como tarea adicional realizar las respectivas validaciones.

En Resumen: Con este procedimiento se logra satisfacer cierto escenario relacionado con el filtrado de datos a nivel de control de usuario, tal es el caso del DataGridView y todo esto relacionado con la manipulación de criterio de búsquedas aproximado o exacto generado por parte del usuario final.

Anexo código fuente para ilustra el tema: Búsquedas en DataGridView (Visual Basic 2010 y SQL Server 2008)

Blog de WordPress.com.