2011-03-01 7 views
7

En Windows Form, tengo un control DataGridView con registros llenados por una fuente de datos (enlace de datos). Cada registro presenta un objeto de datos.El control DataGridView se desplaza hacia arriba cuando una propiedad cambió

No se muestran todas las filas: solo las 10 primeras por ejemplo. Entonces el usuario puede desplazarse hacia abajo para ver los otros registros. Nada especial sobre esto.

Pero cuando un usuario hace clic en una fila después de desplazarse, una propiedad del objeto de datos de la fila está cambiando y esto refresca la DataGridViewand - IT "se desplaza" a la parte superior de la cuadrícula de datos (tal vez todo el DataGridView es refrescante). Esto no es deseable.

¿Cómo puedo mantener la posición de desplazamiento actual durante una actualización de registro?

Respuesta

7

Puede usar la propiedad FirstDisplayedScrollingRowIndex de DataGridView.

Obtiene/establece el índice de la primera fila que se muestra en su DGV.

utilizar de esta manera:

 int rowIndex = dataGridView.FirstDisplayedScrollingRowIndex; 

     // Refresh your DGV. 

     dataGridView.FirstDisplayedScrollingRowIndex = rowIndex; 

Por supuesto, esto no va a funcionar del todo bien, si una especie o añadir/eliminar filas a su DGV (se ha dicho que estaban actualizando así que tal vez estás bien).

+0

Hola Jay. Esto funciona. Gracias por el consejo. – robertpnl

+0

Tuve el mismo problema. Descubrí que es la llamada a AcceptChanges() en mi DataSource lo que lo hace, así que lo solucioné guardando el valor de FirstDisplayedScrollingRowIndex antes de la llamada y restaurándolo después. – JonP

Cuestiones relacionadas