Sie sind auf Seite 1von 3

Blog de Jorge Pedraza

julio 5, 2010
Busquedas en DataGridView
Archivado en: Aplicaciones Windows jorgepedraza @ 5:47 am Tags: ADO.NET, Busquedas, DataGridView, DataTable, SQLServer Hola, la presente intenta mostrar un procedimiento de inters 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 clsico escenario de bsqueda rpida de filas dentro de un control DataGridView. Dicho escenario es una aplicacin Windows donde contiene controles sensibles a datos, tal es el caso del DataGridView, adems de poseer un mecanismo de vinculacin y gestin de datos. En esta aplicacin se establece otros elementos de inters como caja de texto y etiqueta. El manejo de la aplicacin se basa en introducir un criterio de bsqueda aproximado o exacto dentro de determinada caja de texto, y de acuerdo a la primera coincidencia se establece como resultado la seleccin dinmica de la fila contenida dentro del control DataGridView.

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 informacin 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 rplica 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 posicin del cursor DataGridView: Representa el control base en forma de cuadricula para la visualizacin y gestin de datos vinculado en determinado DataTable. Windows Forms: Es el control principal de interfaz grafica que acta como contenedor de controles de gestin de usuario.

Descripcin del Algoritmo para Bsqueda rpida de fila en un control DataGridView: 1. Se declara 3 variables: o Posicion del tipo Integer, el cual representa la posicin de un registro. o Ncolumn del tipo String, el cual representa el nombre de columna para filtro. o Strsort del tipo String, el cual representa el nombre de columna para Ordenar. 2. Se actualiza el valor de la variable Strsort segn el caso selectivo de la columna establecida para la ordenacin. 3. El valor de la variable Strsort se pasa al mtodo 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 seleccin 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 posicin. 7. Se escribe un bloque condicional para seleccionar o no la fila del DataGridView en base al valor de la variable posicin. Descripcin 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 ordenacin 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 ordenacin 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 validacin de la entrada de datos relacionado con el criterio de bsqueda. Y esto se debe a que el procedimiento planteado esta susceptible a errores con la introduccin 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 manipulacin de criterio de bsquedas aproximado o exacto generado por parte del usuario final.