Exemplo n.º 1
0
        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
            {
            }
        }
Exemplo n.º 2
0
        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);
            }
        }