2010-08-10 50 views
2

我想动态地创建一个基本的ASP.NET TreeView控件。但是当我调用RenderControl()来获取它的输出时,ASP.NET会抛出空引用异常。当我在.ascx/aspx中声明一个不在这里发生的TreeView时,ASP.NET在幕后做了什么?如何以编程方式呈现ASP.NET TreeView?

断裂:

protected override void DoRender(HtmlTextWriter output) 
    { 
     TreeView treeview = new TreeView(); 
     treeview.SkipLinkText = String.Empty; //omit this for exception on get_SpacerImageUrl 
     treeview.ImageSet = TreeViewImageSet.BulletedList; 

     TreeNode node = new TreeNode("Node 1"); 
     node.ImageUrl = string.Empty; 
     node.ChildNodes.Add(new TreeNode("Subnode 1")); 
     node.ChildNodes.Add(new TreeNode("Subnode 2")); 
     treeview.Nodes.Add(node); 

     node = new TreeNode("Node 2"); 
     node.ChildNodes.Add(new TreeNode("Subnode 1")); 
     node.ChildNodes.Add(new TreeNode("Subnode 2")); 
     node.ChildNodes.Add(new TreeNode("Subnode 3")); 
     treeview.Nodes.Add(node); 

     treeview.RenderControl(output); 
    } 

正常工作:

  <asp:TreeView ID="tvMenu" runat="server"> 
      <Nodes> 
       <asp:TreeNode Text="Node 1"> 
        <asp:TreeNode Text="Section 1"></asp:TreeNode> 
        <asp:TreeNode Text="Section 2"></asp:TreeNode> 
        <asp:TreeNode Text="Section 3"></asp:TreeNode> 
       </asp:TreeNode> 
       <asp:TreeNode Text="Node 2"> 
        <asp:TreeNode Text="Section One"></asp:TreeNode> 
        <asp:TreeNode Text="Section Two"></asp:TreeNode> 
        <asp:TreeNode Text="Section Three"></asp:TreeNode> 
       </asp:TreeNode> 
      </Nodes> 
     </asp:TreeView> 

例外: [NullReferenceException异常:对象引用不设置为一个对象的一个​​实例] System.Web.UI.WebControls .TreeView.GetImageUrl(Int32索引)+3089 System.Web.UI.WebControls.TreeNode.Render(HtmlTextWriter writer,Int32 position,Boolean [] isLast,Boolean enabled)+2329

+0

在什么情况下你想使这个控制? – womp 2010-08-10 23:55:05

+0

在基于System.Web.UI.WebControls.WebControl的控件中。 HtmlTextWriter绝对有效。渲染更简单的控件(如TextBox)可以正常工作。 – Bryan 2010-08-11 00:07:17

+1

我无法找到在代码隐藏中声明的TreeView的单个示例......非常令人沮丧。 – Bryan 2010-08-11 00:09:00

回答

0

可以在代码隐藏创建动态TreeView控件,像这样:

using (var db = new FORMS()) 
       { 
        //Get Chapters from selected form 
        var query = from b in db.CHAPTERS 
           select b; 

        //Create treeview hierarchy 
        foreach (var rootItem in query) 
        { 
         TreeNode myNode = new TreeNode(rootItem.titulo, rootItem.id.ToString()); 

         var childQuery = from b in db.SECTIONS 
             select b; 
         //Add childs 
         foreach (var childItem in childQuery) 
         { 
          TreeNode myChildNode = new TreeNode(childItem.titulo, childItem.id.ToString()); 
          myNode.ChildNodes.Add(myChildNode); 
         } 

         ChapterTreeView.Nodes.Add(myNode); 
        } 
       } 
相关问题