C#窗口形成2个带有同步滚动的网格视图

我正在开发一个应用程序,其中从不同的数据源填充两个datagridviews。 我想有一个垂直滚动条,可以使两个网格视图同时工作(一起向上和向下滚动)

任何人都可以告诉我如何或指导我一个好的教程。

如果你有dgv1和dgv2,你可以创建类似的东西

dgv1.Scroll += new System.Windows.Forms.ScrollEventHandler(dgv1_Scroll); 

然后,在dgv1_Scroll方法中,您可以使用FirstDisplayedScrollingRowIndex属性:

 dgv2.FirstDisplayedScrollingRowIndex = dgv1.FirstDisplayedScrollingRowIndex 

当然,如果dgv具有不同的行数,则需要通过检查每个dgv行数来避免IndexOutOfRangeexception。

我相信你可以设置类似事件的场景,每当滚动条A的“值”发生变化时,也可以将滚动条B更改为适当的值。

(注意,value是滚动条的属性,我不是指容器内数据的值。)

有关滚动条的属性,请参阅以下msdn文章以获得更好的参考:

http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollbar.value.aspx

和类本身 – http://msdn.microsoft.com/en-us/library/system.windows.forms.scrollbar.aspx

您可以将DataGridViews放在Panels并使用它:

 public Form1() { InitializeComponent(); panel1.Scroll += new ScrollEventHandler(panel1_Scroll); } void panel1_Scroll(object sender, ScrollEventArgs e) { panel2.AutoScrollPosition = new Point(0,e.NewValue); } 

不幸的是, DataGridView似乎没有这个属性。

http://www.xs4all.nl/~wrb/Articles_2010/Article_DataGridViewScroll_01.htm

这个链接显示了我需要的东西,并且对我来说很好。 我现在唯一的问题是datagrids中没有相同的行。 因此,即使一个人完成(不再滚动),另一个人必须能够继续。

有什么建议?

使用HorizontalScrollingOffset (或VerticalScrollingOffset )。

 this.dataGridViewDataSample.HorizontalScrollingOffset 

看看这个 。 当我滚动其中任何一个时,我想同步两个列表视图。 你可以使用自定义控件实现这一点。 代码就像一个魅力。

 _dataGridViewInput.Scroll += new ScrollEventHandler(_dataGridViewInput_Scroll); _dataGridViewOutput.Scroll += new ScrollEventHandler(_dataGridViewOutput_Scroll); void _dataGridViewInput_Scroll(object sender, ScrollEventArgs e) { this._dataGridViewOutput.FirstDisplayedScrollingRowIndex = this._dataGridViewInput.FirstDisplayedScrollingRowIndex; } void _dataGridViewOutput_Scroll(object sender, ScrollEventArgs e) { this._dataGridViewInput.FirstDisplayedScrollingRowIndex = this._dataGridViewOutput.FirstDisplayedScrollingRowIndex; }