【问题标题】:Creating Dynamic UL LI创建动态 UL LI
【发布时间】:2014-03-25 19:03:50
【问题描述】:

我正在尝试根据从数据库收到的数据创建动态 Ul Li

基本上我从数据库收到的列如下 1.CategoryID 2.ParentCategoryID 3.Href 4.姓名。

现在我使用以下循环来创建我的 UL。

while (rdr.Read())
{
    if (rdr["ParentCategoryID"].ToString() == "")
    {
        System.Web.UI.HtmlControls.HtmlGenericControl newLI = 
            new System.Web.UI.HtmlControls.HtmlGenericControl("li");

        newLI.Attributes.Add("class", "Item-"+(i+1));
        newLI.ID = "id" + i;
        newLI.InnerHtml = "<a href=" + '"' + 
                             rdr["Href"].ToString() + "/default.aspx" + 
                            '"' +'>' + 
                            "<span>" + rdr["Name"]+"</span>" + "</a>";
        newUL.Controls.Add(newLI);
        i++;
    }
}

在这种情况下,我只创建 UL 的顶层...但这是一个多级 UL

假设我的输入如下

CategoryID ParentCategoryID Href Name

1 NULL /a-d A-C

2 1 /a A

3 1 /b B

4 1 /c C

5 NULL /d-e D-E

6 5 /d D

7 5 /e E

8 NULL /f-g F-G

9 8 /f F

10 8 /g G

目前我的代码一直有效,直到我得到 ​​p>

  • A-C
  • D-E
  • F-G

如何改进这一点,以便将子类别列在父类别下?

【问题讨论】:

    标签: c# dynamic html-lists stringbuilder


    【解决方案1】:

    如果您按ParentCategoryID 对项目进行排序,则可以执行第二次传递以添加所有具有非NULL 父类别的元素。

    只需将新项目添加到父项的 Controls 属性即可。

    通常我使用Dictionary&lt;Key, Value&gt; 来跟踪现有元素并能够通过 ID 快速访问它们。

    最后,如果您先按ParentCategoryIDNULL 对整个数据进行排序,然后按CategoryID 排序,您应该可以在一个while 循环中完成。

    【讨论】:

    • 第二遍怎么做?
    • 将从阅读器读取的数据存储在一个列表中,并再次遍历该列表。如果您阅读了我的最后一条语句,您应该可以在一个循环中完成。
    • 是的。我正在这样做。谢谢。最后我的代码工作了
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多