private void OnRowChanged(object sender, DataRowChangeEventArgs args)
{
if (_ignoreDataSetEvents)
return;
_ignoreXmlEvents = true;
bool wasFoliationEnabled = IsFoliationEnabled;
IsFoliationEnabled = false;
try
{
DataRow row = args.Row;
XmlBoundElement rowElement = row.Element;
// We should have an associated row-elem created when the DataRow was created (or at the load time)
Debug.Assert(rowElement != null);
switch (args.Action)
{
case DataRowAction.Add:
OnAddRow(row);
break;
case DataRowAction.Delete:
OnDeleteRow(row, rowElement);
break;
case DataRowAction.Rollback:
switch (_rollbackState)
{
case DataRowState.Deleted:
OnUndeleteRow(row, rowElement);
UpdateAllColumns(row, rowElement);
break;
case DataRowState.Added:
rowElement.ParentNode.RemoveChild(rowElement);
break;
case DataRowState.Modified:
OnColumnValuesChanged(row, rowElement);
break;
}
break;
case DataRowAction.Change:
OnColumnValuesChanged(row, rowElement);
break;
case DataRowAction.Commit:
if (row.RowState == DataRowState.Detached)
{
//by now, all the descendent of the element that is not of this region should have been promoted already
rowElement.RemoveAll();
}
break;
default:
break;
}
}
finally
{
IsFoliationEnabled = wasFoliationEnabled;
_ignoreXmlEvents = false;
}
}