在asp.net中递归绑定无序列表

时间:2014-04-30 06:03:48

标签: asp.net c#-4.0

我有一个如下数据:

id         menuname                      url                         parentid
1        Home                        ~/Home.aspx                    NULL    
2        Product                        ~/products.aspx                NULL 
3        Services                    ~/services.aspx                NULL    
4        ERP                            ~/erp.aspx                    2
5        HRM                            ~/hrm.aspx                    4
7        Payroll                        ~/payroll.aspx                4
8        Programming                    ~/programming.aspx            3
9        Advertising                    ~/advert.aspx                3
10        Television Advert            ~/tvadvert.aspx                9
11        Radio Advert                ~/radioadvert.aspx            9

所以我想根据上面的数据表生成菜单项到无序列表中,以便null parentid的项应该是第一级菜单 和其他人将基于他们的parentid这样的子菜单:

<ul class="menu">
    <li><a href="home.aspx">Home</a></li>
    <li><a href="produc.aspx">Product</a>
            <ul>
                <li>
                <a href="erp.aspx">ERP</a>    
                    <ul>
                        <li><a href="hrm.aspx">HRM</a></li>
                        <li><a href="payroll.aspx">Payroll</a></li>
                    </ul>
                </li>
            </ul>
    </li>
    <li><a href="services.aspx">Services</a>
            <ul>
                <li><a href="programming.aspx">Advertising</a></li>
                <li><a href="advert.aspx">Programming</a></li>
            </ul>
    </li>

    .....etc
</ul>

问题是我无法理解如何做到这一点

1 个答案:

答案 0 :(得分:0)

试试这个

var dtrow = dt.Select("parentid is null or parentid=''");
    var str = new StringBuilder();
    str.Append("<ul class='menu'>");
    if (dtrow.Any())
    {
        foreach (DataRow row in dtrow)
        {
            str.AppendFormat("<li><a href='{0}'>{1}</a></li>", row["url"].ToString(), row["menuname"].ToString());
            var crow = dt.Select("parentid='" + row["id"] + "'");
            if (crow.Any())
            {
                 str.Append("<ul>");
                 foreach (DataRow drow in crow)
                 {
                     var ccrow = dt.Select("parentid='" + drow["id"] + "'");
                     if (ccrow.Any())
                     {
                         str.AppendFormat("<li><a href='{0}'>{1}</a>", drow["url"], drow["menuname"]);
                         str.Append("<ul>");
                         foreach (DataRow dcrow in ccrow)
                         {
                             str.AppendFormat("<li><a href='{0}'>{1}</a></li>", dcrow["url"], dcrow["menuname"]);
                         }
                         str.Append("</ul>");
                         str.Append("</li>");

                     }
                     else
                     {
                         str.AppendFormat("<li><a href='{0}'>{1}</a></li>", drow["url"], drow["menuname"]);
                     }

                 }
                 str.Append("</ul>");

            }

        }

    }
    else
    {
        foreach (DataRow row in dt.Rows)
        {
            str.AppendFormat("<li><a href='{0}'>{1}</a></li>", row["url"], row["menuname"]);
        }
    }
    str.Append("</ul>");