public override void WriteTo(XmlWriter w) { DataPointer dp = new DataPointer((XmlDataDocument)OwnerDocument, this); try { dp.AddPointer(); WriteRootBoundElementTo(dp, w); } finally { dp.SetNoLongerUse(); } }
private XmlNode CloneTreeInternal(DataPointer other) { Debug.Assert(_ignoreDataSetEvents == true); Debug.Assert(_ignoreXmlEvents == true); Debug.Assert(IsFoliationEnabled == false); // Create the diconnected tree based on the other navigator XmlNode newNode = CloneNode(other); DataPointer dp = new DataPointer(other); try { dp.AddPointer(); if (newNode.NodeType == XmlNodeType.Element) { int cAttributes = dp.AttributeCount; for (int i = 0; i < cAttributes; i++) { dp.MoveToOwnerElement(); if (dp.MoveToAttribute(i)) { newNode.Attributes.Append((XmlAttribute)CloneTreeInternal(dp)); } } dp.MoveTo(other); } for (bool fMore = dp.MoveToFirstChild(); fMore; fMore = dp.MoveToNextSibling()) newNode.AppendChild(CloneTreeInternal(dp)); } finally { dp.SetNoLongerUse(); } return newNode; }
public override XmlNode CloneNode(bool deep) { XmlDataDocument clone = (XmlDataDocument)(base.CloneNode(false)); clone.Init(DataSet.Clone()); clone._dataSet.EnforceConstraints = _dataSet.EnforceConstraints; Debug.Assert(clone.FirstChild == null); if (deep) { DataPointer dp = new DataPointer(this, this); try { dp.AddPointer(); for (bool fMore = dp.MoveToFirstChild(); fMore; fMore = dp.MoveToNextSibling()) { XmlNode cloneNode; if (dp.NodeType == XmlNodeType.Element) cloneNode = clone.CloneTree(dp); else cloneNode = clone.CloneNode(dp); clone.AppendChild(cloneNode); } } finally { dp.SetNoLongerUse(); } } return clone; }
public override void WriteTo( XmlWriter w ) { DataPointer dp = new DataPointer( (XmlDataDocument)OwnerDocument, this ); try { dp.AddPointer(); WriteRootBoundElementTo( dp, w ); } finally { dp.SetNoLongerUse(); } }