Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ MergeRow()

DataRow System.Data.DataTable.MergeRow ( DataRow row,
DataRow targetRow,
bool preserveChanges,
Index idxSearch )
inlinepackageinherited

Definition at line 2111 of file DataTable.cs.

2112 {
2113 if (targetRow == null)
2114 {
2117 targetRow._newRecord = targetRow._oldRecord;
2118 if (row._oldRecord != row._newRecord)
2119 {
2121 }
2122 InsertRow(targetRow, -1L);
2123 }
2124 else
2125 {
2126 int tempRecord = targetRow._tempRecord;
2128 try
2129 {
2130 DataRowState rowState = targetRow.RowState;
2131 int oldRecord = ((rowState == DataRowState.Added) ? targetRow._newRecord : (oldRecord = targetRow._oldRecord));
2132 if (targetRow.RowState == DataRowState.Unchanged && row.RowState == DataRowState.Unchanged)
2133 {
2134 int oldRecord2 = targetRow._oldRecord;
2135 int newRecord = (preserveChanges ? _recordManager.CopyRecord(this, oldRecord2, -1) : targetRow._newRecord);
2136 oldRecord2 = _recordManager.CopyRecord(row.Table, row._oldRecord, targetRow._oldRecord);
2137 SetMergeRecords(targetRow, newRecord, oldRecord2, DataRowAction.Change);
2138 }
2139 else if (row._newRecord == -1)
2140 {
2141 int oldRecord2 = targetRow._oldRecord;
2142 int newRecord = ((!preserveChanges) ? (-1) : ((targetRow.RowState == DataRowState.Unchanged) ? _recordManager.CopyRecord(this, oldRecord2, -1) : targetRow._newRecord));
2143 oldRecord2 = _recordManager.CopyRecord(row.Table, row._oldRecord, oldRecord2);
2144 if (oldRecord != ((rowState == DataRowState.Added) ? newRecord : oldRecord2))
2145 {
2146 SetMergeRecords(targetRow, newRecord, oldRecord2, (newRecord == -1) ? DataRowAction.Delete : DataRowAction.Change);
2147 idxSearch.Reset();
2148 oldRecord = ((rowState == DataRowState.Added) ? newRecord : oldRecord2);
2149 }
2150 else
2151 {
2152 SetMergeRecords(targetRow, newRecord, oldRecord2, (newRecord == -1) ? DataRowAction.Delete : DataRowAction.Change);
2153 }
2154 }
2155 else
2156 {
2157 int oldRecord2 = targetRow._oldRecord;
2158 int newRecord = targetRow._newRecord;
2159 if (targetRow.RowState == DataRowState.Unchanged)
2160 {
2162 }
2163 oldRecord2 = _recordManager.CopyRecord(row.Table, row._oldRecord, oldRecord2);
2164 if (!preserveChanges)
2165 {
2166 newRecord = _recordManager.CopyRecord(row.Table, row._newRecord, newRecord);
2167 }
2168 SetMergeRecords(targetRow, newRecord, oldRecord2, DataRowAction.Change);
2169 }
2170 if (rowState == DataRowState.Added && targetRow._oldRecord != -1)
2171 {
2172 idxSearch.Reset();
2173 }
2174 }
2175 finally
2176 {
2178 }
2179 }
2180 if (row.HasErrors)
2181 {
2182 if (targetRow.RowError.Length == 0)
2183 {
2184 targetRow.RowError = row.RowError;
2185 }
2186 else
2187 {
2188 DataRow dataRow = targetRow;
2189 dataRow.RowError = dataRow.RowError + " ]:[ " + row.RowError;
2190 }
2191 DataColumn[] columnsInError = row.GetColumnsInError();
2192 for (int i = 0; i < columnsInError.Length; i++)
2193 {
2194 DataColumn column = targetRow.Table.Columns[columnsInError[i].ColumnName];
2195 targetRow.SetColumnError(column, row.GetColumnError(columnsInError[i]));
2196 }
2197 }
2198 else if (!preserveChanges)
2199 {
2200 targetRow.ClearErrors();
2201 }
2202 return targetRow;
2203 }
void SetMergeRecords(DataRow row, int newRecord, int oldRecord, DataRowAction action)
void InsertRow(DataRow row, int proposedID, int pos)
readonly RecordManager _recordManager
Definition DataTable.cs:74
int ImportRecord(DataTable src, int record)
int CopyRecord(DataTable src, int record, int copy)

References System.Data.DataTable._recordManager, System.Data.RecordManager.CopyRecord(), System.Runtime.Serialization.Dictionary, System.Data.RecordManager.ImportRecord(), System.Data.DataTable.InsertRow(), System.L, System.Data.DataTable.NewEmptyRow(), and System.Data.DataTable.SetMergeRecords().