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; }