Sincronizzare lo scroll orizzontale di due DataGrid

Per sincronizzare  lo scroll orizzontale di due Datagrid si può utilizzare la Reflection per accedere alla proprietà Friend del DataGrid HorizontalOffset.

Il trucco sta nel ricavare nell’evento Scroll del primo DataGrid il relativo valore di HorizontalOffset e impostarlo sulla seconda DataGrid:

 

Private Sub DataGrid1_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Scroll

 

       Dim horizontalOffset1 As System.Reflection.PropertyInfo

       horizontalOffset1 =

Me.DataGrid1.GetType().GetProperty(“HorizontalOffset”, _
              System.Reflection.BindingFlags.NonPublic
Or _
              System.Reflection.BindingFlags.GetProperty
Or _
              System.Reflection.BindingFlags.Instance)

 

       Dim horizontalOffset2 As System.Reflection.PropertyInfo

       horizontalOffset2 =

Me.DataGrid2.GetType().GetProperty(“HorizontalOffset”, _
              System.Reflection.BindingFlags.NonPublic
Or _
              System.Reflection.BindingFlags.GetProperty
Or _
              System.Reflection.BindingFlags.Instance)

       horizontalOffset2.SetValue(

Me.DataGrid2, _
              horizontalOffset1.GetValue(
Me.DataGrid1, Nothing), Nothing)

 

End Sub