public DataRow LoadDataRow(object[] values, bool fAcceptChanges)
{
long logScopeId = DataCommonEventSource.Log.EnterScope("<ds.DataTable.LoadDataRow|API> {0}, fAcceptChanges={1}", ObjectID, fAcceptChanges);
try
{
DataRow row;
if (_inDataLoad)
{
int record = NewRecordFromArray(values);
if (_loadIndex != null)
{
// not expecting LiveIndexes to clear the index we use between calls to LoadDataRow
Debug.Assert(2 <= _loadIndex.RefCount, "bad loadIndex.RefCount");
int result = _loadIndex.FindRecord(record);
if (result != -1)
{
int resultRecord = _loadIndex.GetRecord(result);
row = _recordManager[resultRecord];
Debug.Assert(row != null, "Row can't be null for index record");
row.CancelEdit();
if (row.RowState == DataRowState.Deleted)
{
SetNewRecord(row, row._oldRecord, DataRowAction.Rollback, false, true);
}
SetNewRecord(row, record, DataRowAction.Change, false, true);
if (fAcceptChanges)
{
row.AcceptChanges();
}
return row;
}
}
row = NewRow(record);
AddRow(row);
if (fAcceptChanges)
{
row.AcceptChanges();
}
return row;
}
else
{
// In case, BeginDataLoad is not called yet
row = UpdatingAdd(values);
if (fAcceptChanges)
{
row.AcceptChanges();
}
return row;
}
}
finally
{
DataCommonEventSource.Log.ExitScope(logScopeId);
}
}