2010-08-10 4 views
2

Я пытаюсь динамически создать базовый элемент управления ASP.NET TreeView. Но когда я вызываю RenderControl(), чтобы получить его вывод, ASP.NET генерирует исключения для нулевой ссылки. Что делает ASP.NET за кулисами, когда я объявляю TreeView в .ascx/aspx, который НЕ происходит здесь?Как визуализировать 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, Boolean [] isLast, Boolean enabled) +2329

+0

В каком контексте вы пытаетесь сделать этот контроль? – womp

+0

В элементе управления на основе System.Web.UI.WebControls.WebControl. HtmlTextWriter определенно действителен. Оказание более простых элементов управления (например, TextBox) отлично работает. – Bryan

+1

Я не могу найти ни одного примера TreeView, объявленного в коде, где-нибудь ... очень неприятно. – Bryan

ответ

0

Вы можете создать динамический TreeView Control в CodeBehind так:

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); 
        } 
       } 
Смежные вопросы