This article has been
excerpted from book "A Programmer's Guide to ADO.NET in C#".
The XmlDataDocument events are useful when your application needs to notify you
when changes are being made to an XmlDataDocument object. XmlDocument defines
XmlDataDocument events (see Table 9-6).
Table 9-6. XmlDataDocument Events
EVENT |
DESCRIPTION |
NodeChanged |
Occurs when the
value of a node has been changed |
NodeChanging |
Occurs when the
value of a node is changing |
NodeInserted |
Occurs when a node
inserted into another node |
NodeInserting |
Occurs when a node
inserting to another node |
NodeRemove |
Occurs when a node
has been removed |
NodeRemoving |
Occurs when a node
is being removed |
The XmlNodeChangedEventHandler method handles the events listed in Table 9-6.
The XmlNodeChangedEventHandler is as follows:
public delegate
void
XmlNodeChangedEventHandler(object sender, XmlNodeChangedEventArgs
e);
Where sender is the source of the event and e is an XmlNodeChangedEventArgs that
contains the event data. XmlNodeChangedEventArgs defines properties (see Table
9-7).
Table 9-7. The XmlNodeChangedEventArgs properties
PROPERTY |
DESCRIPTION |
Action |
Returns a value
indicating the type of node changed event |
NewParent |
Returns a value of
parent node after the operation is finished |
Node |
Returns the node
that is being added, removed, or changed |
OldParent |
Returns the value
of the parent node before operation started |
Listing 9-11. Handles XmlDataDocument events. The XmlDocumentBtn_Click method
creates event handlers for the NodeChanged, NodeInserted, and NodeRemoved
events. The MyNodeChangedEvent, MyNodeInsertEvent, and MyNodeRemoved event
handlers execute when these events fire. I used LoadXml to load an XML fragment
and then used the ReplaceChild and RemoveChild methods to replace and remove
document nodes.
Listing 9-11. The XmlDataDocument event handling sample
private void
XmlDocumentBtn_Click(object sender, System.EventArgs
e)
{
XmlDocument
xmlDoc = new
XmlDocument();
xmlDoc.LoadXml("<Record>
Some Value </Record>");
// Create the event handlers.
xmlDoc.NodeChanged
+=
new
XmlNodeChangedEventHandler(this.MyNodeChangedEvent);
xmlDoc.NodeInserted +=
new
XmlNodeChangedEventHandler(this.MyNodeInsertedEvent);
xmlDoc.NodeRemoved
+=
new
XmlNodeChangedEventHandler(this.MyNodeRemovedEvent);
XmlElement root = xmlDoc.DocumentElement;
string str = root.ToString();
XmlDocumentFragment xmlDocFragment =
xmlDoc.CreateDocumentFragment();
xmlDocFragment.InnerXml =
"<Fragment><SomeDate>Fragment
Data</SomeDate></Fragment>";
//
Replace Node
XmlElement rootNode = xmlDoc.DocumentElement;
rootNode.ReplaceChild(xmlDocFragment, rootNode.LastChild);
//Remove Node
XmlNode node = xmlDoc.LastChild;
xmlDoc.RemoveChild(node);
}
Listing 9-12. Shows the NodeChangedEvent handler. The Node property of
XmlNodeChangedEventArgs returns XmlNode. Using the Node property you can get
more information about a node such as its parent node, value, name, namespace,
and so on.
Listing 9-12. The NodeChanged event handler
public void
MyNodeChangedEvent(object src,
XmlNodeChangedEventArgs args)
{
MessageBox.Show
("Node
Changed Event Fired for node " + args.Node.Name);
if (args.Node.Value !=
null)
{
MessageBox.Show(args.Node.Value);
}
}
Similar to listing 9-12, Listing 9-13 and 9-14 show event handlers for the
NodeInserted and NodeRemoved events.
Listing 9-13. The NodeInserted event handler
public void
MyNodeInsertedEvent(object src,
XmlNodeChangedEventArgs args)
{
MessageBox.Show
("Node
Inserted event fired for node " + args.Node.Name);
if (args.Node.Value !=
null)
{
MessageBox.Show(args.Node.Value);
}
}
Listing 9-14.The NodeRemoved event handler
public void
MyNodeRemovedEvent(object src,
XmlNodeChangedEventArgs args)
{
MessageBox.Show
("Node
Removed event fired for node " + args.Node.Name);
if (args.Node.Value !=
null)
{
MessageBox.Show(args.Node.Value);
}
}
Conclusion
Hope this article would have helped you in understanding
working
with XmlDataDocument Events in ADO.NET.
See other articles on
the website also for further reference.
|
This essential guide
to Microsoft's ADO.NET overviews C#, then leads you toward deeper
understanding of ADO.NET. |