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)

16 comentarios »

  1. Hola.
    Muy interesante esta información, pero porque no pones el código fuente tal cual?

    Saludos,

    Comentarios por jose perez — May 28, 2012 @ 8:35 pm | Responder

    • Hola.
      Gracias por el comentario.
      El código fuente funcional, lo puede descargar a través de un link (BusquedasDataGridView) ubicado en la parte inferior de este artículo.

      Saludos.

      Comentarios por JorgePedraza — May 29, 2012 @ 8:59 am | Responder

  2. Dim filas() As DataRow = tablaT.Select(DataGridView1.Columns(columna).Name & ” like ‘” & txtBuscar.Text & “%’”)
    me tira error de valuate expression dice que no encontro la columna del datagridview me podes decir como arreglarlo gracias

    Comentarios por daniel — septiembre 11, 2012 @ 11:43 am | Responder

    • Hola.
      Gracias por escribir.

      Intenta descargar y probar el código fuente adjunto a este articulo Búsquedas en DataGridView (Visual Basic 2010 y SQL Server 2008)

      Cualquier cosa, me avisa.

      Comentarios por JorgePedraza — septiembre 11, 2012 @ 2:34 pm | Responder

      • pero porque al ejecutarlo este el que me mandaste el tuyo no sale el formulario ejecuta pero como que esta oculto

        Comentarios por daniel — septiembre 12, 2012 @ 10:45 am

      • Hola.
        Te explico: El código fuente funciona correctamente!
        Solo debe cumplir los requisitos Actuales:
        SQL Server 2008 R2 Express o superior.
        Visual studio 2010 SP1 o Superior.
        Trata de copiar la carpeta del código dentro de la carpeta Visual Studio 2010 > Projects, en Mis documentos.

        Eso es todo.
        Saludos.

        Comentarios por JorgePedraza — septiembre 12, 2012 @ 1:28 pm

  3. garcias jorge me funciono ya y me gusto como funciona gracias porque si lo necesitaba y queria saber de que pais sos

    Comentarios por daniel — septiembre 14, 2012 @ 10:47 pm | Responder

  4. ok amigo bueno eres muy bueno saludos de aki desde honduras

    Comentarios por daniel — septiembre 16, 2012 @ 8:45 pm | Responder

  5. hey te queria consultar algo como hiciste para jalar la base de datos junto con las tablas al proyecto de visual basic lo nesecito porfavor amigo

    Comentarios por daniel — septiembre 18, 2012 @ 10:44 am | Responder

    • Hola.
      Con respecto a tu consulta: Necesita Visual Studio 2010 sp1 más SQL server 2008 R2 Express o superior.
      Crear un nuevo proyecto desde Visual Studio 2010: plantilla: Aplicación Windows.
      Desde ahí botón derecho sobre el proyecto agregar elemento nuevo: opción Base de datos de Servicio (*.mdf). te va aparecer un asistente el cual debe cancelar. Abre dicho archivo de base de datos y crea estructura de datos específica. Ahora crear cualquier Data Source relacionado con el archivo de base de datos. finalmente tu aplicación base ya esta configurada con tu archivo de base datos. y cada vez que compile, el genera ese archivo en la carpeta bin de tu proyecto.

      Para Mayor información visita: Información general sobre orígenes de datos.

      Saludos.

      Comentarios por JorgePedraza — septiembre 27, 2012 @ 4:59 pm | Responder

      • gracias amigo por la informacion sos de otro nivel

        Comentarios por Daniel — octubre 6, 2012 @ 10:20 pm

  6. A mi me funcionó, muchas gracias amigo, te deseo lo mejor para este nuevo año 2013

    Comentarios por Pedro Chacón — diciembre 27, 2012 @ 12:47 pm | Responder

    • Hola.
      Gracias por tu comentario y buen deseo. 😉

      Saludos cordiales y un Feliz año 2013.

      Comentarios por JorgePedraza — diciembre 27, 2012 @ 2:30 pm | Responder

  7. hola, el link ya no aparece funcionando alguien me podria mandar un ejemplo, es justo lo que necesito.

    Comentarios por Miguel — septiembre 17, 2015 @ 4:40 pm | Responder

    • Hola. Gracias por escribir.
      El link ya esta actualizado!

      Saludos.

      Comentarios por JorgePedraza — septiembre 18, 2015 @ 5:44 am | Responder


RSS feed for comments on this post. TrackBack URI

Replica a daniel Cancelar la respuesta

Crea un blog o un sitio web gratuitos con WordPress.com.