2014-02-24 77 views
0

我試着基於從數據庫創建動態UL李

基本上列我從DB收到收到的數據來創建動態UL李如下 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

假設我INOUT如下

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

目前我的代碼工作,直到whre我得到

  • AC
  • DE
  • FG

如何改善這讓我明白了吧要在父類別下列出的子類別?

回答

1

如果您按ParentCategoryID排序項目,則可以執行第二遍以添加具有非空父類別的所有元素。

只需將新項目添加到父項的Controls屬性中即可。

通常我使用Dictionary<Key, Value>來跟蹤現有元素,並能夠通過ID快速訪問它們。

最後,如果你有NULL,再由CategoryID命令由ParentCategoryID整個數據,你應該能夠做到這一點,在短短一個while循環。

+0

我該如何做第二遍? – MarsOne

+0

將從閱讀器讀取的數據存儲在列表中,並再次在列表中運行。如果你閱讀了我的最後一個陳述,你應該可以在一個循環中完成。 –

+0

是的。我正在那樣做。謝謝。最後,我得到了我的代碼工作 – MarsOne