我有一个如下数据:
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>
问题是我无法理解如何做到这一点
答案 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>");