列出二级,三级分类

xiaomangxian 2009-03-16 12:03:09
我有一个数据库的表a表,结构如下

aid atitle apid (其中aid是主键,自动)
1 dsaffd 0
2 fdsaf 1
3 fdsaf 1
4 fdkaklk 3

上面表明,apid是0的,表示是一级分类,1表示,这个信息是aid为1的分类下面的分类,以此类推,最多有三级分类,我现在想通过

树形结构把这个分类读出来,请问该怎么写呢?
结构形式是

一级分类A
二级分类A
三级分类A
三级分类B
二级分类B
一级分类B
二级分类A
二级分类B
三级分类A
三级分类B

请问该怎么做呢?是否有这样的控件呢?谢谢
...全文
174 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hernmmy 2009-03-17
  • 打赏
  • 举报
回复
帮顶
scy251147 2009-03-16
  • 打赏
  • 举报
回复
那得用到递归,先帮顶,吃饭后回来写
memorywang 2009-03-16
  • 打赏
  • 举报
回复
最好写成无限级的.我是用Hashtable实现的.MenuId,MenuParent分别对应你的aid,apid.我把代码贴给你.实现了要结贴给分啊!

Hashtable myHT_index = new Hashtable();
Hashtable myHT_data = new Hashtable();

String write_tree = "";

protected void NavBar_DataBind()
{
SqlConnection objConn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionSqlServer"]);
string parentString;
parentString = "select MenuId,MenuName,MenuParent,MenuDepth,MenuLink from sys_ManageMenu where Visible<>0 order by MenuParent asc,MenuOrder";
SqlDataAdapter daParent = new SqlDataAdapter(parentString, objConn);
DataSet dsParent = new DataSet();
objConn.Open();
daParent.FillSchema(dsParent, SchemaType.Source, "parentTable");
daParent.Fill(dsParent, "parentTable");
objConn.Close();

for (int i = 0; i < dsParent.Tables[0].Rows.Count; i++)
{
if (myHT_index.Contains(dsParent.Tables[0].Rows[i]["MenuParent"].ToString()))
{
myHT_index[dsParent.Tables[0].Rows[i]["MenuParent"].ToString()] += "," + dsParent.Tables[0].Rows[i]["MenuId"].ToString();
}
else
{
myHT_index.Add(dsParent.Tables[0].Rows[i]["MenuParent"].ToString(), dsParent.Tables[0].Rows[i]["MenuId"].ToString());
}

if (!myHT_data.Contains(dsParent.Tables[0].Rows[i]["MenuId"].ToString()))
{
myHT_data.Add(dsParent.Tables[0].Rows[i]["MenuId"].ToString(), new string[] { dsParent.Tables[0].Rows[i]["MenuId"].ToString(), dsParent.Tables[0].Rows[i]["MenuName"].ToString(), dsParent.Tables[0].Rows[i]["MenuParent"].ToString(), dsParent.Tables[0].Rows[i]["MenuLink"].ToString() });
}
}
write_tree+="<table>";
show_NavMenu("0", 0);
write_tree+="</table>";
leftNavMenu.Text = write_tree;//leftNavMenu是一个Label
}

protected void show_NavMenu(string MenuParent,int depth)
{
if (myHT_index.Contains(MenuParent))
{
String[] MenuId_item = myHT_index[MenuParent].ToString().Split(',');
for (int i = 0; i < MenuId_item.Length; i++)
{
if (myHT_data.Contains(MenuId_item[i].ToString()))
{
write_tree += "<tr onmouseover=currentcolor=this.style.backgroundColor;this.style.backgroundColor='#C1E1F1' onmouseout=this.style.backgroundColor=currentcolor>";
write_tree += "<td><span style='color:#006666;'>";
for (int j = 0; j < depth; j++)
{
write_tree += "┃";
}
write_tree += "┣ ";
String[] Menu = (String[])myHT_data[MenuId_item[i].ToString()];
if (MenuParent == "0")
{
write_tree += "<span style='font-size:13px;font-weight:bold; cursor:hand;'>" + Menu[1].ToString() + "</span>";
}
else
{
if (Menu[3].IndexOf("?") > 0)
{

write_tree += "<a href='" + Menu[3].ToString() + "&MNid=" + Menu[0].ToString() + "' target='rightFrame'><span style='color:#008787;font-size:11px;'>" + Menu[1].ToString() + "</span></a>";
}
else
{
write_tree += "<a href='" + Menu[3].ToString() + "?MNid=" + Menu[0].ToString() + "' target='rightFrame'><span style='color:#008787;font-size:11px;'>" + Menu[1].ToString() + "</span></a>";
}
}
write_tree += "</span></td>";
write_tree += "</tr>";

if (myHT_index.Contains(MenuId_item[i].ToString()))
{
show_NavMenu(MenuId_item[i].ToString(), depth + 1);
}
}

}
}
}

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧