2010-03-01 6 views
1

XmlDataSource 컨트롤에 바인딩 된 TreeView가 있습니다. TreeNodeBinding 요소를 추가하여 XML 데이터 표시 방법을 정의했습니다.PopulateOnDemand가 데이터 바인딩 ASP.Net TreeView에서 작동하지 않습니다.

또한이 TreeNodeBindings에 PopulateOnDemand = true를 추가했습니다. 그러나 그렇게하면 내용이 변경되지 않고 전체 XML 트리가 표시됩니다. 또한 노드 확장에서도 TreeNodePopulate 이벤트가 발생하지 않습니다.

중요 정보 :

<%@ 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 파일 일 수있다 : 나는 ASP.NET 4

이 (매우 정직) 문제를 재현하는 예입니다 사용하고 있습니다 당신이 원한다면,별로 중요하지 않습니다.

TreeView1_TreeNodePopulate 메서드 내에 중단 점을 넣으려고했으나 결코 충돌하지 않았습니다.

나는 또한에 시도 :

  • PopulateOnDemand = "true"를 각각 가능한 데이터 멤버에 대한 TreeNodeBinding을 설정합니다.
  • 코드를 통해 모든 트리 노드를 통해 PopulateOnDemand 속성을 true으로 설정합니다.

아무 것도 효과가 없습니다.

필요시 채워지는 유일한 방법은 데이터 소스에 노드를 바인딩하는 대신 노드에 노드를 수동으로 추가하는 경우입니다.

내가 뭘 잘못하고 있니? true로 설정된 PopulateOnDemand 속성 노드가 TreeView 제어에 확장 될 때

+0

당신은 표시 할 수 있습니다 : 1) 마크 업 2) 당신은 내가 프로그래밍 트리 노드를 통과하고 그렇게해야 OnTreeNodePopulate 이벤트 핸들러 – JohnIdol

답변

2

글쎄, 당신은 같은 시간에 바인딩 및 PopulateOnDemand 데이터를 사용할 수 없습니다 밝혀졌습니다. 필요에 따라 노드를 채우려면 데이터 소스에서 읽어야하고 데이터 바인딩이 아닌 코드를 통해 노드를 만들어야합니다.

2

설정 각 노드의 TreeNode.PopulateOnDemand 속성을

TreeView.TreeNodePopulate 진정한 에 이벤트 발생합니다.

+0

를 구현하고 뒤에 경우 코드를? DataBinding 선언이 정확히 그렇게하지 않아야합니까? –

+1

PopulateOnDemand는 코드를 통해 노드를 추가 할 때 유용하여 필요성까지 모든 것을로드하지 않도록합니다. XML 데이터 바인딩은 모든 것을로드하는 것처럼 보입니다. – CRice

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); 
관련 문제