internal bool NextInitialTextLikeNodes(out string value)
{
Debug.Assert(CurrentNode != null);
Debug.Assert(CurrentNode.NodeType == XmlNodeType.Element);
#if DEBUG
// It's not OK to try to read the initial text value for sub-regions, because we do not know how to revert their initial state
if (CurrentNode.NodeType == XmlNodeType.Element && DataSetMapper.GetTableSchemaForElement((XmlElement)(CurrentNode)) != null)
{
if (CurrentNode != _rowElement)
{
Debug.Fail("Reading the initial text value for sub-regions.");
}
}
#endif
ElementState oldState = _rowElement.ElementState;
// We do not want to cause any foliation w/ this iterator or use this iterator once the region was defoliated
Debug.Assert(oldState != ElementState.None);
XmlNode?n = CurrentNode.FirstChild;
value = GetInitialTextFromNodes(ref n);
if (n == null)
{
// If we have been defoliated, we should have stayed that way
Debug.Assert((oldState == ElementState.Defoliated) ? (_rowElement.ElementState == ElementState.Defoliated) : true);
// Rollback eventual foliation
_rowElement.ElementState = oldState;
return(NextRight());
}
Debug.Assert(!XmlDataDocument.IsTextLikeNode(n));
_currentNode = n;
// If we have been defoliated, we should have stayed that way
Debug.Assert((oldState == ElementState.Defoliated) ? (_rowElement.ElementState == ElementState.Defoliated) : true);
// Rollback eventual foliation
_rowElement.ElementState = oldState;
return(true);
}