internal void CopyRow (DataRow fromRow, DataRow toRow) { if (fromRow.HasErrors) fromRow.CopyErrors (toRow); if (fromRow.HasVersion (DataRowVersion.Original)) toRow.Original = toRow.Table.RecordCache.CopyRecord (this, fromRow.Original, -1); if (fromRow.HasVersion (DataRowVersion.Current)) { if (fromRow.Original != fromRow.Current) toRow.Current = toRow.Table.RecordCache.CopyRecord (this, fromRow.Current, -1); else toRow.Current = toRow.Original; } }
/// <summary> /// Copies a DataRow into a DataTable, preserving any /// property settings, as well as original and current values. /// </summary> public void ImportRow (DataRow row) { if (row.RowState == DataRowState.Detached) return; DataRow newRow = NewNotInitializedRow (); int original = -1; if (row.HasVersion (DataRowVersion.Original)) { original = row.IndexFromVersion (DataRowVersion.Original); newRow.Original = RecordCache.NewRecord (); RecordCache.CopyRecord (row.Table, original, newRow.Original); } if (row.HasVersion (DataRowVersion.Current)) { int current = row.IndexFromVersion (DataRowVersion.Current); if (current == original) { newRow.Current = newRow.Original; } else { newRow.Current = RecordCache.NewRecord (); RecordCache.CopyRecord (row.Table, current, newRow.Current); } } //Import the row only if RowState is not detached //Validation for Deleted Rows happens during Accept/RejectChanges if (row.RowState != DataRowState.Deleted) newRow.Validate (); else AddRowToIndexes (newRow); Rows.AddInternal(newRow); if (row.HasErrors) row.CopyErrors (newRow); }
/// <summary> /// Copies a DataRow into a DataTable, preserving any /// property settings, as well as original and current values. /// </summary> public void ImportRow (DataRow row) { DataRow newRow = NewNotInitializedRow(); int original = -1; if (row.HasVersion(DataRowVersion.Original)) { original = row.IndexFromVersion(DataRowVersion.Original); newRow.Original = RecordCache.NewRecord(); RecordCache.CopyRecord(row.Table,original,newRow.Original); } if (row.HasVersion(DataRowVersion.Current)) { int current = row.IndexFromVersion(DataRowVersion.Current); if (current == original) newRow.Current = newRow.Original; else { newRow.Current = RecordCache.NewRecord(); RecordCache.CopyRecord(row.Table,current,newRow.Current); } } if (EnforceConstraints) // we have to check that the new row doesn't colide with existing row Rows.ValidateDataRowInternal(newRow); Rows.AddInternal(newRow); if (row.HasErrors) { row.CopyErrors(newRow); } }