[分享]分享一个自己写的理论上支持无限级分类的树型机构

NqIceCoffee 2007-10-11 10:06:49
.aspx页面
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>myTree</title>
<style type="text/css">
<!--
ul{margin:0px;padding:4px 0px 4px 25px;list-style:none;}
li,span,div{font-size:12px;}
//-->
</style>
</head>
<body>
<asp:Literal ID="lit_Tree" runat="server"></asp:Literal>
<script language="javascript" type="text/javascript">
<!--
function Change(id) {
var el = document.getElementById(id);
if(el.style.display == "none") {
el.style.display = "";
document.getElementById("img_" + id).innerHTML = "-";
} else {
el.style.display = "none";
document.getElementById("img_" + id).innerHTML = "+";
}
}
//-->
</script>
</body>
</html>


.cs

public partial class index : System.Web.UI.Page
{
private DBHelper db = new DBHelper();

protected void Page_Load(object sender, EventArgs e)
{
StringBuilder sb_tree = new StringBuilder();
if (Cache["Tree"] == null)
CacheTree();
GetTree(0, sb_tree);
lit_Tree.Text = sb_tree.ToString();
}
protected void GetTree(int parentID, StringBuilder sb_tree)
{
DataTable dt_all = Cache["Tree"] as DataTable;
string typeName = GetTypeName(parentID);
sb_tree.Append(string.Format("<span onClick=\"Change('{0}');\" style=\"cursor:pointer;\"><span id='img_{0}'>+</span> {1}</span>", parentID, typeName));
DataRow[] dr_Item = dt_all.Select(string.Format("typeParentID={0}", parentID));
if (parentID == 0)
sb_tree.Append(string.Format("<div id='{0}' style='display:;'>\r\n", parentID));
else
sb_tree.Append(string.Format("<div id='{0}' style='display:none;'>\r\n", parentID));
foreach(DataRow dr in dr_Item)
{
sb_tree.Append("<ul>\r\n");
if (HaveChild(int.Parse(dr["typeID"].ToString())))
GetTree(int.Parse(dr["typeID"].ToString()), sb_tree); //===>重要!递归!
else
sb_tree.Append(string.Format("<li>·{0}</li>\r\n", dr["typeName"].ToString()));
sb_tree.Append("</ul>\r\n");
}
sb_tree.Append("</div>\r\n");
}

//判断该节点是否有子节点
protected bool HaveChild(int myID)
{
DataTable dt_all = Cache["Tree"] as DataTable;
return dt_all.Select(string.Format("typeParentID={0}", myID)).Length > 0;
}

//缓存该树的所有节点
protected void CacheTree()
{
string cmdText = "select * from type_trade";
DataTable dt = db.ExecuteDataTable(cmdText);
Cache.Insert("Tree", dt);
dt = null;
}

//根据节点取该节点的名称
protected string GetTypeName(int typeID)
{
if (typeID == 0)
return "根节点";
if (Cache["Tree"] == null)
CacheTree();
DataTable dt_all = Cache["Tree"] as DataTable;
return dt_all.Select(string.Format("typeID={0}", typeID))[0]["typeName"].ToString();
}
}



数据库结构:
typeID --自增列
typeName --分类名称
typeParentID --父类别ID
typePath --该分类的深度,即:以,分割的typeID
...全文
97 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyongbiao 2007-11-01
  • 打赏
  • 举报
回复
UP

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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