2010-03-01 32 views
1

我有一個綁定到XmlDataSource控件的TreeView。我添加了一些TreeNodeBinding元素來定義我希望如何顯示XML數據。PopulateOnDemand不適用於數據綁定ASP.Net TreeView

我也爲這些TreeNodeBindings添加了PopulateOnDemand = true。但是,這樣做不會改變事物,並且顯示整個XML樹。此外,TreeNodePopulate事件也不會在節點擴展上觸發。

重要信息:我使用ASP.NET 4

這能重現問題(很簡單的)例子:

<%@ 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> 

sample.xml的可以是任何XML文件你想,這並不重要。

我試圖在TreeView1_TreeNodePopulate方法中放置一個斷點,並且它從未被擊中。

我也試圖:

  • 設置一個的TreeNodeBinding用於與PopulateOnDemand = 「真」 的每個可能的數據成員。
  • 通過代碼,遍歷所有樹節點並將其PopulateOnDemand屬性設置爲true

沒有工作。

按需填充的東西的唯一工作方式是當我手動添加節點到節點而不是綁定到數據源。

我在做什麼錯?

+0

可以顯示:1)標記2)的後面,如果你執行OnTreeNodePopulate事件處理 – JohnIdol 2010-03-05 00:17:48

回答

2

嗯,事實證明,你不能使用數據同時綁定和PopulateOnDemand。 如果您想按需填充節點,您必須從數據源讀取數據,並通過代碼創建節點,而不是通過數據綁定。

2

配置各節點的TreeNode.PopulateOnDemand屬性

TreeView.TreeNodePopulate事件 當其PopulateOnDemand屬性節點設置爲true在TreeView控制擴展時發生。

+0

我應該通過樹節點編程和做的代碼? DataBinding聲明不應該那樣做嗎? – 2010-03-05 10:11:00

+1

在我看來,通過代碼添加節點時,PopulateOnDemand非常有用,以避免在需要時加載所有內容 - xml數據綁定似乎無論如何都會加載所有內容 – CRice 2010-03-07 23:15:01

0

將PopulateonDemand命令移動到頂端!

 bool Expanded = Convert.ToBoolean(Convert.ToInt16(dr["Expand"].ToString().Trim())); 
     TreeNode tn = new TreeNode(); 

     tn.PopulateOnDemand = true; 
     tn.Expanded = Expanded; 
     tn.Text = dr["Menu"].ToString(); 
     tn.Value = dr["ItemOrder"].ToString(); 
     tn.NavigateUrl = ""; 

     if (!string.IsNullOrEmpty(dr["Page"].ToString())) 
     { 
      tn.NavigateUrl = dr["Page"].ToString(); 
     } 

     nodes.Add(tn);