internal void MergeRow(DmRow row, DmRow targetRow, bool preserveChanges) { // Si le merge ne concerne pas une ligne déjà existante if (targetRow == null) { ImportRow(row); return; } int proposedRecord = targetRow.tempRecord; // by saving off the tempRecord, EndEdit won't free newRecord targetRow.tempRecord = -1; try { DmRowState saveRowState = targetRow.RowState; int saveIdxRecord = (saveRowState == DmRowState.Added) ? targetRow.newRecord : saveIdxRecord = targetRow.oldRecord; int newRecord; int oldRecord; if (targetRow.RowState == DmRowState.Unchanged && row.RowState == DmRowState.Unchanged) { // unchanged row merging with unchanged row oldRecord = targetRow.oldRecord; if (preserveChanges) { newRecord = this.Rows.GetNewVersionId(); CopyRecords(this, oldRecord, newRecord); } else { newRecord = targetRow.newRecord; } CopyRecords(row.Table, row.oldRecord, targetRow.oldRecord); } else if (row.newRecord == -1) { // Incoming row is deleted oldRecord = targetRow.oldRecord; if (preserveChanges) { if (targetRow.RowState == DmRowState.Unchanged) { newRecord = this.Rows.GetNewVersionId(); CopyRecords(this, oldRecord, newRecord); } else { newRecord = targetRow.newRecord; } } else { newRecord = -1; } CopyRecords(row.Table, row.oldRecord, oldRecord); } else { // incoming row is added, modified or unchanged (targetRow is not unchanged) oldRecord = targetRow.oldRecord; newRecord = targetRow.newRecord; if (targetRow.RowState == DmRowState.Unchanged) { newRecord = this.Rows.GetNewVersionId(); CopyRecords(this, oldRecord, newRecord); } CopyRecords(row.Table, row.oldRecord, oldRecord); if (!preserveChanges) { CopyRecords(row.Table, row.newRecord, newRecord); } } } finally { targetRow.tempRecord = proposedRecord; } }
internal bool ValuesAreEqual(DmRow row, object[] comparables) { var record = row.GetCurrentRecordId(); return(ValuesAreEqual(record, comparables)); }