【问题标题】:How to render an ASP.NET TreeView programmatically?如何以编程方式呈现 ASP.NET TreeView?
【发布时间】:2010-08-10 23:28:15
【问题描述】:

我正在尝试动态创建一个基本的 ASP.NET TreeView 控件。但是当我调用 RenderControl() 来获取它的输出时,ASP.NET 会抛出空引用异常。当我在 .ascx/aspx 中声明未在此处发生的 TreeView 时,ASP.NET 在幕后做了什么?

破碎:

    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

【问题讨论】:

  • 你在什么情况下试图渲染这个控件?
  • 在一个基于 System.Web.UI.WebControls.WebControl 的控件中。 HtmlTextWriter 绝对有效。渲染更简单的控件(如文本框)可以正常工作。
  • 我在任何地方都找不到在代码隐藏中声明的 TreeView 的单个示例......非常令人沮丧。

标签: asp.net treeview


【解决方案1】:

您可以像这样在 CodeBehind 中创建动态 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);
                    }
                }

【讨论】:

    猜你喜欢
    • 2021-09-07
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2011-02-02
    相关资源
    最近更新 更多