Lilypie Primer PicLilypie Primer Ticker

lunes, 26 de febrero de 2007

Sincronizar el desplazamiento de dos DataGridViews

Uno siempre aprende nuevas cosas colaborando en los foros.

Hoy un compañero preguntó como se podia tener dos DataGridViews con las columnas visibles sincronizadas, es decir, que si uno se desplaza horizontalmente utilizando el scrollbar de uno de los datagridviews, el otro también se desplace exactamente igual que el primero

La solución resultó ser bastante simple, todo es cuestión de actualizar la propiedad HorizontalScrollingOffset de un DataGridView, desde el evento Scroll del otro.

Primero manejamos el evento Scroll del dataGridView1, actualizando la propiedad HorizontalScrollingOffset del dataGridView2, asi:

private void dataGridView1_Scroll(object sender, ScrollEventArgs e)
{
dataGridView2.HorizontalScrollingOffset = e.NewValue;
}

ahora a la inversa:

private void dataGridView2_Scroll(object sender, ScrollEventArgs e)
{
dataGridView1.HorizontalScrollingOffset = e.NewValue;
}

Nada más, ahora podremos desplazarnos con el scrollbar de cualquiera de de los datagridviews y el otro se desplazará automáticamente.

Un código muy simple, con muchas posibles aplicaciones.

8 comentarios:

Unknown dijo...

que tal me parece muy buena tu aportacion!!
Pero queria saber si me puedes mandar el codio en perfil vb!!
de antemani gracias.

atte,
Robert Pareja
a.sagashaka@gmail.com

J. Marcos Troncoso dijo...

Hola Robert.. gracias por visitar mi blog.

En este momento estoy de vacaciones lejos de la civilizacion :). Dios mediante estare de vuelta en la civilizacion el proximo lunes 14.

Y como VB no es mi mejor amigo y no tengo VS a mano, no puedo enviarte un codigo VB fiable en este momento, pero apenas vuelva te lo hare llegar.

De todas formas, lo unico que se necesita es manejar el evento Scroll del Datagridview, y ahi colocar el mismo codigo q aparece en el post:

dataGridView2.HorizontalScrollingOffset = e.NewValue;

Es solo eso.. a ver si te sirve por ahora, de todas formas, la sgte semana tendras el codigo completo.

Saludos

r3xet dijo...

Intente utilizar tu sincronizacion de scroll pero me mandaba siempre un error, y investigando vi otra solucion muy parecia.

void dataGridView2_Scroll(object sender, ScrollEventArgs e)
{
this.dataGridView1.FirstDisplayedScrollingRowIndex = this.dataGridView2.FirstDisplayedScrollingRowIndex;
}

void dataGridView1_Scroll(object sender, ScrollEventArgs e)
{
this.dataGridView2.FirstDisplayedScrollingRowIndex = this.dataGridView1.FirstDisplayedScrollingRowIndex;
}

J. Marcos Troncoso dijo...

@r3xet:

Gracias por la lectura y el aporte.

Podrias decirme cual es el error que te daba el codigo que yo publiqué?

gracias y saludos.

r3xet dijo...

@J. Marcos Troncoso
Si me mostraba un error al asignar el valor a la propiedad HorizontalScrollingOffset, me decia que tenia que asignarle un valor valido entre el rango minimo y maximo, algo raro pero en fin.

Ademas HorizontalScrollingOffset solo me permite el manejo del scroll horizontalmente y no verticalmente ya que la propiedad
VerticalScrollingOffset solo es de lectura :S

Espero que sirva.....

saludos

J. Marcos Troncoso dijo...

@r3xet:

ese error probablemente se deba a que los minimos/maximos de las DGVs sean diferentes. Lo tomaré muy en cuenta.

otra vez, gracias por el aporte.

saludos

Anónimo dijo...

buenas, programadores les recuerod que este codigo lo ejecute y se descuadra cuando muevo el scroll vertical, asi que ojo con eso, aqui les dejo el codigo completo para solucionar eso.

If e.ScrollOrientation = ScrollOrientation.HorizontalScroll Then
DatosEncabezados.HorizontalScrollingOffset = e.NewValue
End If

Anónimo dijo...

Muy buen aporte, gracias.