ASP.NET - как заполнить элемент управления TreeView ответом на данные XML из обработчика ASHX - PullRequest
4 голосов
/ 29 октября 2008

У меня есть обработчик ASHX, который возвращает ответ XML (FileStructureXML.ashx).

Теперь мне нужно получить ответ XML от обработчика ASHX и использовать его в качестве источника данных для моей страницы ASPX.

Если я указываю XMLDataSource на статический XML-файл на сервере, древовидная структура заполняется, как и ожидалось. Однако, если я указываю 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>

Ответы [ 2 ]

2 голосов
/ 29 октября 2008

Я думаю, что XmlDataSource работает только с реальным файлом, а не с URL. Вы можете обойти эту проблему, не указав свойство DataFile и динамически загрузив свойство Data в свой код. Я думаю, что выбор FirstChild.OuterXml правильный, но вам, возможно, придется поэкспериментировать. Я не в том месте, где я могу это проверить.

XmlDocument treeDoc = new XmlDocument();
treeDoc.Load( "~/FileStructureXML.ashx" ); // this takes a URL
FileXml.Data = treeDoc.FirstChild.OuterXml; // everything after the xml definition
0 голосов
/ 28 августа 2009
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
<a href="http://muruganad.com/ASP.NET/ASP_.NET_How_to_Populate_a_TreeView_Control_With_TreeNode_s_Using_recursive_algorithm_or_recursion_.html" rel="nofollow noreferrer">http://muruganad.com/ASP.NET/ASP_.NET_How_to_Populate_a_TreeView_Control_With_TreeNode_s_Using_recursive_algorithm_or_recursion_.html</a>
...