internal void MergeTable(DataTable src)
{
bool fEnforce = false;
if (!isStandAlonetable)
{
if (src.DataSet == dataSet)
{
return; //somebody is doing an 'automerge'
}
fEnforce = dataSet.EnforceConstraints;
dataSet.EnforceConstraints = false;
}
else
{
if (src == dataTable)
{
return; //somebody is doing an 'automerge'
}
dataTable.SuspendEnforceConstraints = true;
}
if (this.dataSet != null) // this is ds.Merge
// if source does not have a DS, or if NS of both DS does not match, ignore the NS
{
if (src.DataSet == null || src.DataSet.namespaceURI != this.dataSet.namespaceURI)
{
_IgnoreNSforTableLookup = true;
}
}
else // this is dt.Merge
{
if (this.dataTable.DataSet == null || src.DataSet == null ||
src.DataSet.namespaceURI != this.dataTable.DataSet.namespaceURI)
{
_IgnoreNSforTableLookup = true;
}
}
MergeTableData(src);
DataTable dt = dataTable;
if (dt == null && dataSet != null)
{
if (_IgnoreNSforTableLookup)
{
dt = dataSet.Tables[src.TableName];
}
else
{
dt = dataSet.Tables[src.TableName, src.Namespace];
}
}
if (dt != null)
{
dt.EvaluateExpressions();
}
if (!isStandAlonetable)
{
dataSet.EnforceConstraints = fEnforce;
}
else
{
dataTable.SuspendEnforceConstraints = false;
try {
if (dataTable.EnforceConstraints)
{
dataTable.EnableConstraints();
}
}
catch (ConstraintException) {
if (dataTable.DataSet != null)
{
dataTable.DataSet.EnforceConstraints = false;
}
throw;
}
}
}