private void OnNodeInsertedInTree(XmlNode node)
{
XmlBoundElement be;
ArrayList rowElemList = new ArrayList();
if (_mapper.GetRegion(node, out be))
{
if (be == node)
{
OnRowElementInsertedInTree(be, rowElemList);
}
else
{
OnNonRowElementInsertedInTree(node, be, rowElemList);
}
}
else
{
// We only need to sync the embedded sub-regions
TreeIterator iter = new TreeIterator(node);
for (bool fMore = iter.NextRowElement(); fMore; fMore = iter.NextRightRowElement())
rowElemList.Add(iter.CurrentNode);
}
// Process subregions, so they make transition from disconnected to connected tree
while (rowElemList.Count > 0)
{
Debug.Assert(rowElemList[0] != null && rowElemList[0] is XmlBoundElement);
XmlBoundElement subRowElem = (XmlBoundElement)(rowElemList[0]);
rowElemList.RemoveAt(0);
// Expect rowElem to have a DataTable schema, since it is a sub-region
Debug.Assert(subRowElem != null);
OnRowElementInsertedInTree(subRowElem, rowElemList);
}
// Assert that all sub-regions are assoc w/ "live" rows
AssertLiveRows(node);
}
// "node" was inserting into a disconnected tree from oldParent==null state