首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2011-12-11 
[分享]分享一个自己写的理论上支持无限级分类的树型机构.aspx页面C# codehtml xmlnshttp://www.w3.org/

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

C# code
<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

C# code
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

[解决办法]
UP

热点排行