ASP.NET--如何使用来自ASHX处理程序的XML数据响应填充TreeView控件

ASP.NET--如何使用来自ASHX处理程序的XML数据响应填充TreeView控件,asp.net,xml,treeview,xmldatasource,Asp.net,Xml,Treeview,Xmldatasource,我有一个返回XML响应的ASHX处理程序(FileStructureXML.ASHX) 现在,我需要从ASHX处理程序获取XML响应,并将其用作我的ASPX页面的数据源 如果我将XMLDataSource指向服务器上的静态XML文件,treeview将按预期填充。但是,如果我将XMLDataSource指向ASHX处理程序,而不是服务器上的静态XML文件,那么它就不起作用 任何帮助都将不胜感激 <body> <form id="form1" runat="server"

我有一个返回XML响应的ASHX处理程序(FileStructureXML.ASHX)

现在,我需要从ASHX处理程序获取XML响应,并将其用作我的ASPX页面的数据源

如果我将XMLDataSource指向服务器上的静态XML文件,treeview将按预期填充。但是,如果我将XMLDataSource指向ASHX处理程序,而不是服务器上的静态XML文件,那么它就不起作用

任何帮助都将不胜感激

<body>
    <form id="form1" runat="server">
    <div>

        <asp:TreeView ID="TreeView_Folders" runat="server" DataSourceID="FileXML">
            <DataBindings>
                <asp:TreeNodeBinding DataMember="Directory" TextField="Name" />
                <asp:TreeNodeBinding DataMember="File" TextField="Name" />
            </DataBindings>        
        </asp:TreeView> 
    </div>
    <div>
        <asp:XmlDataSource ID="FileXML" runat="server" DataFile="FileStructureXML.ashx">
        </asp:XmlDataSource>
    </div>
    </form>
</body>

我认为XmlDataSource只适用于实际文件,而不是URL。您可以通过不指定数据文件属性并在代码隐藏中动态加载数据属性来解决此问题。我认为FirstChild.OuterXml选择是正确的,但您可能需要进行实验。我不是在一个可以测试它的地方

XmlDocument treeDoc = new XmlDocument();
treeDoc.Load( "~/FileStructureXML.ashx" ); // this takes a URL
FileXml.Data = treeDoc.FirstChild.OuterXml; // everything after the xml definition
将oDataSet设置为新数据集 公共子PopulateTree(ByVal ParentId作为字符串,ByVal TVNode作为TreeNode) 将oDataView作为新数据视图(oDataSet.Tables(0),“ParentID=”&ParentID&“”, “数据”,DataViewRowState.OriginalRows) 将oDataRow设置为数据行视图 对于oDataView中的每个oDataRow Dim Otherenode作为新的TreeNode(oDataRow(“数据”)) Dim oComboBox作为新组合框 如果TVNode为空,则 其他的 TVNode.Nodes.Add(OtreNode) 人口树(oDataRow(“ID”),oTreeNode) 如果结束 下一个 端接头 这就是你调用上述函数的方式 PopulateTree(0,tvPost.TopNode) tvPost-它的名字是TreeView T 要阅读更多信息,请单击此链接 Dim oDataSet As New DataSet Public Sub PopulateTree(ByVal ParentId As String, ByVal TVNode As TreeNode) Dim oDataView As New DataView(oDataSet.Tables(0), "ParentID='" & ParentId & "'", "DATA", DataViewRowState.OriginalRows) Dim oDataRow As DataRowView For Each oDataRow In oDataView Dim oTreeNode As New TreeNode(oDataRow("DATA")) Dim oComboBox As New ComboBox If TVNode Is Nothing Then Else TVNode.Nodes.Add(oTreeNode) PopulateTree(oDataRow("ID"), oTreeNode) End If Next End Sub This is how U call the above function PopulateTree(0, tvPost.TopNode) tvPost - its the name of TreeView T To Read More Click this link http://muruganad.com/ASP.NET/ASP_.NET_How_to_Populate_a_TreeView_Control_With_TreeNode_s_Using_recursive_algorithm_or_recursion_.html