简体   繁体   中英

Sync horizontal scroll event of two DataGridViews

I need to synchronize the scroll event of two DataGridView controls, so that when I horizontally scroll the first DGV, second DGV also should be scrolled in the same way.

Is it possible? Could this be set in design time?

This can be done in code as follows. You may be looking for a C# way of doing it. But following is a code I used in a VB.NET application. Just convert it to C# ;)

For First Grid write...

Private Sub DataGridView1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles DataGridView1.Scroll

        If e.ScrollOrientation = ScrollOrientation.VerticalScroll Then Exit Sub
        If Me.DataGridView2.Rows.Count > 0 And Me.DataGridView1.Rows.Count > 0 Then
            Me.DataGridView2.HorizontalScrollingOffset = e.NewValue 'Me.DataGridView1.HorizontalScrollingOffset
        End If

End Sub

For Second Grid write...

Private Sub DataGridView2_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles DataGridView2.Scroll

        If e.ScrollOrientation = ScrollOrientation.VerticalScroll Then Exit Sub
        If Me.DataGridView1.Rows.Count > 0 And Me.DataGridView2.Rows.Count > 0 Then
            Me.DataGridView1.HorizontalScrollingOffset = e.NewValue 'Me.DataGridView2.HorizontalScrollingOffset
        End If

End Sub

Hope this helped?

Here's a C# example; translated from @CAD's answer

If using Visual Studio, you can create a blank function easily by clicking the blank cell next to "Scroll" in listeners.

滚动监听器

Then add the same to both:

private void dataGridViewLeft_Scroll(object sender, ScrollEventArgs e)
{
    if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll && dataGridViewLeft.Rows.Count > 0 && dataGridViewRight.Rows.Count > 0)
    {
        dataGridViewRight.HorizontalScrollingOffset = dataGridViewLeft.HorizontalScrollingOffset;
    }
}

private void dataGridViewRight_Scroll(object sender, ScrollEventArgs e)
{
    if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll && dataGridViewRight.Rows.Count > 0 && dataGridViewLeft.Rows.Count > 0)
    {
        dataGridViewLeft.HorizontalScrollingOffset = dataGridViewRight.HorizontalScrollingOffset;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM