创建动态UL LI

时间:2014-02-24 08:18:52

标签: c# dynamic html-lists stringbuilder

我试图根据从数据库收到的数据创建动态UI Li

基本上我从DB收到的列如下 1.CategoryID 2.ParentCategoryID 3.Href 4.Name。

现在我使用以下循环来创建我的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

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

  • A-C
  • d-E
  • F-G

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

1 个答案:

答案 0 :(得分:1)

如果您按ParentCategoryID订购商品,则可以执行第二遍以添加具有非NULL父类别的所有元素。

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

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

最后,如果您首先按ParentCategoryIDNULL订购整个数据,然后按CategoryID订购,则应该只能在一个while循环中进行。