martes, 3 de junio de 2008

DataGridView, selección de filas.

Por cosas del destino, estoy metido en mi primer proyecto con Visual Basic.NET para escritorio. Yo, alma y carnaza de asp.net, me veo observando boquiabierto la cantidad de cosas que puede hacer este control en comparación con mi querido/odiado ViewGrid.

Mejorando la aplicación para nuestros sufridos usuarios (la UT anterior había desarrollado de espaldas a todo el mundo) me veo en la necesidad de que el usuario pueda seleccionar una fila, que abre otro formulario, y que, cuando refresque el DataGridView, mantenga la fila seleccionada y que además la mantenga dentro de la pantalla sin perderse por las profundidades del scroll.

Lo primero es muy fácil. Capturo en el evento de doble clic en una celda (así está hecho. Y tengo que mirar seleccionar por filas) el índice de la fila seleccionada y lo cargo en una variable para luego hacer una selección de fila por ese índice.

Aquí capturo la fila en la que se realiza el doble clic.

Private Sub dgvDocumentos_CellContentDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvDocumentos.CellContentDoubleClick

intFilaSeleccionada = e.RowIndex

End Sub


Y aquí le digo al grid cual es la fila que debe volver a seleccionar una vez vuelto a cargar el Grid.

Public Sub CargarGrid()



Me.dgvDocumentos.Item(0, 0).Selected = False
Me.dgvDocumentos.Item(0, intFilaSeleccionada).Selected = True

End Sub

Pero, y siempre hay uno, el problema es que al recargar el control, me saltaba a la primera fila, y perdía de vista la fila seleccionada.

Buscando la solución me recorrí media Internet de la mano de San Google y al final, en un foro de MSDN encontré una sencilla y eficaz solución:

Me.dgvDocumentos.FirstDisplayedScrollingRowIndex = intFilaSeleccionada

Y VOALA!!

7 comentarios:

Unknown dijo...

tENGO UN PROBLEMA RELACIONADO A LO QUE TU ESCRIBISTE LO QUE PASA ES QUE TENGO UN DATAGRIDVIEW Y BUSCO EN EL ,ENCUENTRO LO QUE ESTOY BUSCANDO Y HAGO QUE SE MUESTRE EN LA PRIMERA FILA DE LA DEL DATAGRIDVIEW PERO SOLO SE SOMBREA NO ESTA CON EL CURSOR ENSIMA ES DECIR CUANDO DHAGO EL CURRENROWINDEX ME APARECE AUN EL INDICE DEL PRIMER REGISTRO SELECCIONADO

Unknown dijo...

como stas....muy bueno tu codigo.....pero como 100pre hay un pero ...mira lo que pasa es k yo stoy llenando mi grilla cada 8 segundos ,..si selecciono la ultima fila captura el e.rowindex=22,...pero cuando busco ese 22 ya no va ah ser real por k ya mnos filas en grilla....como puedo corregir...eso.

El Gabo dijo...

muhcas gracias pro el dato justo estab abuscando y no encontraba como hacer pero con esto ya salio chevre .. lo que si me da un poco de pica fue que vi esa propieda y no le hice caso jejejejeje

Efren Cardozo Meléndez dijo...

Tengo el mismo problema, creí que había encontrado la solución en tu blog, sin embargo no me funciona lo que indicas. Efren

Juan Quijano dijo...

Es cierto, cuando se selecciona la última fila o la primera y se borra dá un error.

Eso, que no lo he publicado, se corrige controlando el grid.rows.count y asignando el máximo y mínimo valor posible.

Y, si, sique funciona. No os lo puedo enseñar porque es un proyecto de una Intranet... :)

AlexDevil dijo...

Hola,tu articulo me ayudo bastante; logre corregir ciertos errores del datagridview en un programa en c#

Yelinna dijo...

Lo bueno de VB.Net es que es fácil de traducir al C#. Yo personalmente prefiero C#