C# 创建动态ulli

C# 创建动态ulli,c#,dynamic,html-lists,stringbuilder,C#,Dynamic,Html Lists,Stringbuilder,我试图根据从数据库接收到的数据创建一个动态ulli 基本上,我从DB收到的列如下 1.分类 2.ParentCategoryID 3.Href 4.姓名 现在我使用下面的循环来创建UL while (rdr.Read()) { if (rdr["ParentCategoryID"].ToString() == "") { System.Web.UI.HtmlControls.HtmlGenericControl newLI = new S

我试图根据从数据库接收到的数据创建一个动态ulli

基本上,我从DB收到的列如下 1.分类 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++;
    }
}
while(rdr.Read())
{
如果(rdr[“ParentCategoryID”].ToString()=“”)
{
System.Web.UI.HtmlControls.HtmlGenericControl newLI=
新系统.Web.UI.HtmlControls.HtmlGenericControl(“li”);
Add(“类”,“项-”+(i+1));
newLI.ID=“ID”+i;
newLI.InnerHtml=“”;
newUL.Controls.Add(newLI);
i++;
}
}
在这种情况下,我只创建UL的顶级。。。但这是一个多层次的问题

假设我的inout如下

CategoryID ParentCategoryID Href Name

1空/a-d a-C

2 1/a a

3 1/b

4 1/c c

5空/d-e d-e

65/d

75/e

8空/f-g f-g

9 8/f

10 8/g g

目前我的代码一直工作到

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

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

如果您按
ParentCategoryID
排序项目,则可以执行第二次操作,以添加具有非空父类别的所有元素

只需将新项添加到父控件的
属性中即可

通常我使用
字典
来跟踪现有元素,并能够通过ID快速访问它们


最后,如果您先按
ParentCategoryID
NULL
对整个数据进行排序,然后再按
CategoryID
,那么您应该能够在循环过程中只在一次
中完成排序。

如何进行第二次遍历?将从读取器读取的数据存储在一个列表中,然后再次遍历该列表。如果你读了我的最后一句话,你应该可以在一个循环中完成。是的。我正在这样做。谢谢最后我的代码开始工作了