.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>.cspublic 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
<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>.cspublic 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
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货