Hi,
I have a TreeView that is bound to a XmlDataSource control. I've added some TreeNodeBinding elements to define how I want the XML data to be shown.
I have also added PopulateOnDemand=true to these TreeNodeBindings. However, doing so didn't change a thing and the entire XML tree is displayed. Moreover, the TreeNodePopulate event is not fired on node expand as well.
Important information: I'm using ASP.NET 4.
This is an example that reproduces the problem (very straight forward):
<%@ Page Language="C#" AutoEventWireup="true" %>
<script type="text/C#" runat="server">
protected void TreeView1_TreeNodePopulate(Object sender, TreeNodeEventArgs e)
{
// This method is never called...
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TreeView ID="TreeView1" runat="server" DataSourceID="XmlDataSource1" OnTreeNodePopulate="TreeView1_TreeNodePopulate" ExpandDepth="0">
<DataBindings>
<asp:TreeNodeBinding DataMember="#" TextField="#" ValueField="#" PopulateOnDemand="true" />
</DataBindings>
</asp:TreeView>
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="Sample.xml" />
</div>
</form>
</body>
</html>
The Sample.xml can be any xml file you want, it doesn't really matter.
I tried to put a breakpoint within the TreeView1_TreeNodePopulate
method and it was never hit.
I also tried to:
- Set a TreeNodeBinding for each possible data member with PopulateOnDemand="true".
- Via code, go through all tree nodes and set their PopulateOnDemand property to
true
.
Nothing worked.
The only way the populate-on-demand thing worked was when I added nodes manually to the nodes instead of binding it to a data source.
What am I doing wrong?