using System; using System.Collections.Generic; using System.Text; using System.Data; using Menees.DiffUtils; namespace sharpcomparer { public class RowComparison : Comparison { public RowComparison(DataRow leftItem, DataRow rightItem, ComparisonDifference difference) : base(leftItem, rightItem, difference) { } public static List Compare(DataTable left, DataTable right) { int i = 0; //columns1.Sort(delegate(Column p1, Column p2) //{ // return p1.OrdinalPosition.CompareTo(p2.OrdinalPosition); //}); //columns2.Sort(delegate(Column p1, Column p2) //{ // return p1.OrdinalPosition.CompareTo(p2.OrdinalPosition); //}); List r1 = new List(); List r2 = new List(); foreach (DataRow r in left.Rows) { r1.Add(new RowComparison(r, null, Comparison.ComparisonDifference.None)); } foreach (DataRow r in right.Rows) { r2.Add(new RowComparison(null, r, Comparison.ComparisonDifference.None)); } int offset1 = 0; //MyersDiff comparer = new MyersDiff(left.Rows.ToArray(), columns2.ToArray(), true); //EditScript script = comparer.Execute(); //List ColumnsA; //List ColumnsB; //if (script.Count > 0) //{ // foreach (Edit edit in script) // { // switch (edit.Type) // { // case EditType.Insert: // ColumnsB = r2.GetRange(edit.StartB, edit.Length); // ColumnsA = new List(); // foreach (ColumnComparison b in ColumnsB) // { // ColumnComparison a = new ColumnComparison(null, b.RightItem, Comparison.ComparisonDifference.RightOnly); // ColumnsA.Add(a); // } // r1.InsertRange(edit.StartA + offset1, ColumnsA); // offset1 += edit.Length; // break; // case EditType.Change: // for (i = 0; i < edit.Length; i++) // { // r1[edit.StartA + offset1 + i].Difference = Comparison.ComparisonDifference.Different; // r2[edit.StartA + offset1 + i].Difference = Comparison.ComparisonDifference.Different; // } // break; // case EditType.Delete: // ColumnsA = r1.GetRange(edit.StartA + offset1, edit.Length); // ColumnsB = new List(); // foreach (ColumnComparison a in ColumnsA) // { // ColumnComparison b = new ColumnComparison(a.LeftItem, null, Comparison.ComparisonDifference.LeftOnly); // ColumnsB.Add(b); // a.Difference = Comparison.ComparisonDifference.LeftOnly; // } // r2.InsertRange(edit.StartB, ColumnsB); // break; // case EditType.None: // // NOOP // break; // } // } //} //for (i = 0; i < r1.Count; i++) //{ // ColumnComparison cc1 = r1[i]; // ColumnComparison cc2 = r2[i]; // if (cc1.Difference == Comparison.ComparisonDifference.None || cc1.Difference == Comparison.ComparisonDifference.Different) // { // cc1.RightItem = cc2.RightItem; // } //} return r1; } } }