2017-06-05 6 views
0

私はページロード時にツリーデータを読み込むasp.netツリービューコントロールを持っています。以下のコード:ノードを展開するときにのみツリーノードをロードする

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       DocEng.TreeProvider cmsTree = new DocEng.TreeProvider(MembershipContext.AuthenticatedUser); 
       var node = cmsTree.SelectSingleNode(SiteContext.CurrentSiteName, "/", "en-US"); 
       DocEng.TreeNodeCollection myChildren = node.AllChildren; 
       IEnumerable<DocEng.TreeNode> TreeNodes = myChildren.AsEnumerable<DocEng.TreeNode>(); 
       foreach (var tree in TreeNodes.Where(x => x.NodeLevel == 0)) 
       { 
        System.Web.UI.WebControls.TreeNode ParenTreeNode = new System.Web.UI.WebControls.TreeNode(); 
        ParenTreeNode.Text = tree.NodeID.ToString() + ". " + SiteContext.CurrentSiteName; 
        ParenTreeNode.Value = tree.NodeID.ToString(); 
        AddNodes(ParenTreeNode); 
        tvContentTree.Nodes.Add(ParenTreeNode); 
       } 
      } 
     } 


    /// <summary> 
     /// Adding child for the parent 
     /// </summary> 
     /// <param name="TreeNode"></param> 
     private void AddNodes(System.Web.UI.WebControls.TreeNode TreeNode) 
     { 
      DocEng.TreeProvider cmsTree = new DocEng.TreeProvider(MembershipContext.AuthenticatedUser); 
      var node = cmsTree.SelectSingleNode(SiteContext.CurrentSiteName, "/", "en-US"); 
      DocEng.TreeNodeCollection myChildren = node.AllChildren; 
      IEnumerable<DocEng.TreeNode> childTreeNodes = myChildren.AsEnumerable<DocEng.TreeNode>(); 
      foreach (var childTree in childTreeNodes.Where(x => x.NodeParentID == Convert.ToInt32(TreeNode.Value))) 
      { 
       System.Web.UI.WebControls.TreeNode ChildNode = new System.Web.UI.WebControls.TreeNode(); 
       ChildNode.Text = childTree.NodeID.ToString() + ". " + childTree.DocumentName.ToString(); 
       ChildNode.Value = childTree.NodeID.ToString(); 
       TreeNode.ChildNodes.Add(ChildNode); 
       AddNodes(ChildNode); 
       if (childTree.NodeLevel == 1) 
        ChildNode.Collapse(); 
      } 
     } 

ノードを展開するときにのみデータをロードするには、このコードを書き直す必要があります。さらに、データが展開されている間は、クリックされたノードとその子ノードにデータが移入されるだけです。

+0

ここで何が問題なのかわかりません...自分でコードを書き直そうとしましたか? ['TreeNodeExpanded'](https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.treeview.treenodeexpanded(v = vs.110).aspx)を使用する必要があります。イベント。あなたはCMS \ CMSModules \ Content \ Controls \ ContentTree.ascxコントロールを見て、インスピレーションを得ることができます。 – rocky

答えて

0

Page Loadノードとforeachノードで最初のレベルのノードだけを取得しようとすると、1つの空の子ノードが追加され、拡張可能になります。

次に、この子ノードを展開してから、通常の子ノードを追加します。

関連する問題