void MergeTable(DmTable src, DmTable dst) { if (src.Rows.Count == 0) { return; } DmKey key = default(DmKey); try { foreach (DmRow sourceRow in src.Rows) { DmRow targetRow = null; if (dst.Rows.Count > 0 && dst.PrimaryKey != null) { key = GetSrcKey(src, dst); var keyValue = sourceRow.GetKeyValues(key); targetRow = dst.FindByKey(keyValue); } dst.MergeRow(sourceRow, targetRow, preserveChanges); } } finally { } }
internal void MergeRows(DmRow[] rows) { DmTable src = null; DmTable dst = null; DmKey key = default(DmKey); for (int i = 0; i < rows.Length; i++) { DmRow row = rows[i]; if (row == null) { throw new ArgumentNullException("rows[" + i + "]"); } if (row.Table == null) { throw new ArgumentNullException("rows[" + i + "].Table"); } //somebody is doing an 'automerge' if (row.Table.DmSet == dataSet) { continue; } if (src != row.Table) { // row.Table changed from prev. row. src = row.Table; dst = MergeSchema(row.Table); if (dst.PrimaryKey != null) { key = GetSrcKey(src, dst); } } if (row.newRecord == -1 && row.oldRecord == -1) { continue; } DmRow targetRow = null; dst.MergeRow(row, targetRow, preserveChanges); } }