Enumerating XmlDataSources as Tabular/Hierarchical data

Information based on VS.NET 2005 RC1

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);

                }

            }

        }

    }

}

No Comments