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!!
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:
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
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.
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
Tengo el mismo problema, creí que había encontrado la solución en tu blog, sin embargo no me funciona lo que indicas. Efren
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... :)
Hola,tu articulo me ayudo bastante; logre corregir ciertos errores del datagridview en un programa en c#
Lo bueno de VB.Net es que es fácil de traducir al C#. Yo personalmente prefiero C#
Publicar un comentario