using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; namespace sharpcomparer.controls { public partial class ComparisonPanel : UserControl { private int leftScroll; private int rightScroll; private bool isSynced; public ComparisonPanel() { InitializeComponent(); splitContainer.SplitterDistance = (splitContainer.Width - splitContainer.SplitterWidth) / 2; isSynced = true; this.Dock = DockStyle.Fill; } public DataGridView LeftGrid { get { return leftDataGridView; } } public DataGridView RightGrid { get { return rightDataGridView; } } private void leftDataGridView_Scroll(object sender, ScrollEventArgs e) { if (isSynced == false) { return; } if (sender == leftDataGridView && e.ScrollOrientation == ScrollOrientation.VerticalScroll) { leftScroll = leftDataGridView.FirstDisplayedScrollingRowIndex; rightDataGridView_Scroll( leftDataGridView, new ScrollEventArgs(ScrollEventType.ThumbPosition, e.NewValue, ScrollOrientation.VerticalScroll) ); } if (sender == rightDataGridView && e.ScrollOrientation == ScrollOrientation.VerticalScroll) { leftDataGridView.FirstDisplayedScrollingRowIndex = rightScroll; } } private void rightDataGridView_Scroll(object sender, ScrollEventArgs e) { if (isSynced == false) { return; } if (sender == rightDataGridView && e.ScrollOrientation == ScrollOrientation.VerticalScroll) { rightScroll = rightDataGridView.FirstDisplayedScrollingRowIndex; leftDataGridView_Scroll( rightDataGridView, new ScrollEventArgs(ScrollEventType.ThumbPosition, e.NewValue, ScrollOrientation.VerticalScroll) ); } if (sender == leftDataGridView && e.ScrollOrientation == ScrollOrientation.VerticalScroll) { rightDataGridView.FirstDisplayedScrollingRowIndex = leftScroll; } } private void leftDataGridView_DataSourceChanged(object sender, EventArgs e) { foreach (DataGridViewRow row in leftDataGridView.Rows) { string status = row.Cells["Status"].Value != DBNull.Value ? (string)row.Cells["Status"].Value : string.Empty; if (status == "RightOnly") { row.DefaultCellStyle.BackColor = Color.Silver; } else if (status == "Different") { row.DefaultCellStyle.BackColor = Color.Gold; } } if (leftDataGridView.Columns.Contains("Status")) { leftDataGridView.Columns.Remove("Status"); } leftDataGridView.ClearSelection(); } private void rightDataGridView_DataSourceChanged(object sender, EventArgs e) { foreach (DataGridViewRow row in rightDataGridView.Rows) { string status = row.Cells["Status"].Value != DBNull.Value ? (string)row.Cells["Status"].Value : string.Empty; if (status == "LeftOnly") { row.DefaultCellStyle.BackColor = Color.Silver; } else if (status == "Different") { row.DefaultCellStyle.BackColor = Color.Gold; } } if (rightDataGridView.Columns.Contains("Status")) { rightDataGridView.Columns.Remove("Status"); } rightDataGridView.ClearSelection(); } } }