Enumerating XmlDataSources as Tabular/Hierarchical data
You have an XmlDataSource on your page and you wish to enumerate the items as tabular data
private void EnumerateDataSource() {
IDataSource ds = XmlDataSource1 as IDataSource;
if (ds != null) {
XmlDataSourceView xmlDsView = ds.GetView(String.Empty) as XmlDataSourceView;
if (xmlDsView != null) {
IEnumerator enumerator = xmlDsView.Select(DataSourceSelectArguments.Empty).GetEnumerator();
while (enumerator.MoveNext()) {
//Retrieve "Name" attribute from node
//<Employee ID="4" Name="John" />
string employeeName = Convert.ToString(DataBinder.Eval(enumerator.Current, "Name"));
TextArea1.Value += employeeName + "\r\n"; //Append to a TextArea control
}
}
}
}
You have an XmlDataSource on your page and you wish to enumerate the items as hierarchical data
private void EnumerateHierarchicalDataSource() {
IHierarchicalDataSource hs = XmlDataSource1 as IHierarchicalDataSource;
if (hs != null) {
HierarchicalDataSourceView hsDataSourceView = hs.GetHierarchicalView(String.Empty);
if (hsDataSourceView != null) {
IHierarchicalEnumerable iHierarchEnumerable = hsDataSourceView.Select();
ReadRecursive(iHierarchEnumerable, 0);
}
}
}
//Recursively read the hierarchical data node
//Quits recursion on current node if HasChildren is not true
private void ReadRecursive(IHierarchicalEnumerable enumerable, int depth) {
IEnumerator enumerator = enumerable.GetEnumerator();
while (enumerator.MoveNext()) {
IHierarchyData hierarchyData = enumerable.GetHierarchyData(enumerator.Current);
XmlElement element = hierarchyData.Item as XmlElement;
if (element != null) {
Textarea2.Value += String.Format("{0} : {1}{2}",
depth, element.Attributes["Name"].Value,
Environment.NewLine); //Append to a TextArea control
if (hierarchyData.HasChildren) {
IHierarchicalEnumerable iHierarchEnumerable = hierarchyData.GetChildren();
if (iHierarchEnumerable != null) {
ReadRecursive(iHierarchEnumerable, depth + 1);
}
}
}
}
}