Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        internal bool ValuesAreEqual(DmRow row, object[] comparables)
        {
            var record = row.GetCurrentRecordId();

            return(ValuesAreEqual(record, comparables));
        }