C# 如何在DataGridView中同步水平滚动

C# 如何在DataGridView中同步水平滚动,c#,winforms,datagridview,C#,Winforms,Datagridview,我有三个DataGridView:dgvSTART;dgvFilter;德格维迪特 我已编辑了dgvSTART的滚动事件,与答案内联,如下所示: dgvEdit.FirstDisplayedScrollingColumnIndex = dgvSTART.FirstDisplayedScrollingColumnIndex; dgvFilter.FirstDisplayedScrollingColumnIndex = dgvSTART.FirstDisplayedScrollingColumnIn

我有三个DataGridView:dgvSTART;dgvFilter;德格维迪特

我已编辑了dgvSTART的滚动事件,与答案内联,如下所示:

dgvEdit.FirstDisplayedScrollingColumnIndex = dgvSTART.FirstDisplayedScrollingColumnIndex;
dgvFilter.FirstDisplayedScrollingColumnIndex = dgvSTART.FirstDisplayedScrollingColumnIndex;
这是可行的,但只有当dgvSTART的左侧列更改时(即该列消失/显示在面板的一侧),才会滚动其他两个DataGridView

是否可以将所有DataGridView作为一个滚动(忽略列边界)

我认为这可以使用DataGridView的属性,但我的尝试没有成功:

private void dgvSTART_Scroll(object sender, ScrollEventArgs e)
    {
        //using matching the first column shown
        dgvEdit.FirstDisplayedScrollingColumnIndex = dgvSTART.FirstDisplayedScrollingColumnIndex;
        dgvFilter.FirstDisplayedScrollingColumnIndex = dgvSTART.FirstDisplayedScrollingColumnIndex;

        try
        {
            //trying to use horizontalscrollingoffset
            if (e.NewValue < e.OldValue)
            {
                dgvEdit.HorizontalScrollingOffset = dgvFilter.HorizontalScrollingOffset - 10;
                dgvFilter.HorizontalScrollingOffset = dgvFilter.HorizontalScrollingOffset - 10;
            }
            else
            {
                dgvEdit.HorizontalScrollingOffset = dgvEdit.HorizontalScrollingOffset + 10;
                dgvFilter.HorizontalScrollingOffset = dgvFilter.HorizontalScrollingOffset + 10;
            }
        }
        catch (Exception) { }//do nothing with the exception        
    }
private void dgvSTART_滚动(对象发送方,ScrollEventArgs e)
{
//使用匹配显示的第一列
dgvEdit.FirstDisplayedScrollingColumnIndex=dgvSTART.FirstDisplayedScrollingColumnIndex;
dgvFilter.FirstDisplayedScrollingColumnIndex=dgvSTART.FirstDisplayedScrollingColumnIndex;
尝试
{
//尝试使用水平滚动偏移
如果(e.NewValue
这个代码怎么样

dataGridView\u Scroll
需要在表单或其他内容的构造函数中注册

dgvSTART.Scroll  += new ScrollEventHandler(dataGridView_Scroll);
dgvFilter.Scroll += new ScrollEventHandler(dataGridView_Scroll);
dgvEdit.Scroll   += new ScrollEventHandler(dataGridView_Scroll);
dataGridView\u滚动显示如下

void dataGridView_Scroll(object sender, ScrollEventArgs e)
{
    DataGridView src;
    DataGridView dst1 = null;
    DataGridView dst2 = null;

    src = (DataGridView)sender;

    if (src == dgvSTART)
    {
        dst1 = dgvFilter;
        dst2 = dgvEdit;
    }
    else if (src == dgvFilter)
    {
        dst1 = dgvSTART;
        dst2 = dgvEdit;
    }
    else if (src == dgvEdit)
    {
        dst1 = dgvSTART;
        dst2 = dgvFilter;
    }

    if (dst1 != null && dst2 != null)
    {
        dst1.HorizontalScrollingOffset = dst2.HorizontalScrollingOffset = src.HorizontalScrollingOffset;

        dst1.FirstDisplayedScrollingRowIndex = Math.Min(dst1.RowCount - 1, src.FirstDisplayedScrollingRowIndex);
        dst2.FirstDisplayedScrollingRowIndex = Math.Min(dst2.RowCount - 1, src.FirstDisplayedScrollingRowIndex);
    }
}
这个代码怎么样

dataGridView\u Scroll
需要在表单或其他内容的构造函数中注册

dgvSTART.Scroll  += new ScrollEventHandler(dataGridView_Scroll);
dgvFilter.Scroll += new ScrollEventHandler(dataGridView_Scroll);
dgvEdit.Scroll   += new ScrollEventHandler(dataGridView_Scroll);
dataGridView\u滚动显示如下

void dataGridView_Scroll(object sender, ScrollEventArgs e)
{
    DataGridView src;
    DataGridView dst1 = null;
    DataGridView dst2 = null;

    src = (DataGridView)sender;

    if (src == dgvSTART)
    {
        dst1 = dgvFilter;
        dst2 = dgvEdit;
    }
    else if (src == dgvFilter)
    {
        dst1 = dgvSTART;
        dst2 = dgvEdit;
    }
    else if (src == dgvEdit)
    {
        dst1 = dgvSTART;
        dst2 = dgvFilter;
    }

    if (dst1 != null && dst2 != null)
    {
        dst1.HorizontalScrollingOffset = dst2.HorizontalScrollingOffset = src.HorizontalScrollingOffset;

        dst1.FirstDisplayedScrollingRowIndex = Math.Min(dst1.RowCount - 1, src.FirstDisplayedScrollingRowIndex);
        dst2.FirstDisplayedScrollingRowIndex = Math.Min(dst2.RowCount - 1, src.FirstDisplayedScrollingRowIndex);
    }
}

它可以工作,但是当它绘制网格时,它会跳跃。关于如何阻止这种情况,您有什么想法吗?对于单个datagridview也是如此。当用户拖动滚动条时,网格将平滑滚动。当用户单击滚动条上的箭头按钮时,网格会跳跃式滚动。可以通过提供等于e.NewValue