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