返回顶部

收藏

C#无限级分类递归显示示例

更多
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="RoleDemo20150305.aspx.cs" Inherits="RoleDemo20150305" %>  

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  

    <html xmlns="http://www.w3.org/1999/xhtml">  
    <head runat="server">  
        <title>C#无限级分类递归显示示例</title>  
        <style type="text/css">  
        span { float:left; clear:both;}  
        </style>  
        <script src="JS/jquery-1.9.1.js" type="text/javascript"></script>  
        <script type="text/javascript">  
            $(function () {  
                $("span").eq(0).show();  
                $("span").each(function (i) {  
                    var curr = $(this).attr("data-id");  
                    $(this).click(function () {  
                        $("span").each(function (i) {  
                            var father = $(this).attr("data-father");  
                            if (father == curr) {  
                                $(this).show();  
                            }  
                        });  
                    });  
                });  
            });  
        </script>  
    </head>  
    <body>  
        <form id="form1" runat="server">  
        <div>  
            <asp:GridView ID="GridView1" runat="server">  
            </asp:GridView>  

            <br/><br/><br/><br/>  
            <asp:Literal ID="lt1" runat="server"></asp:Literal>  
        </div>  
        </form>  
    </body>  
    </html>  
    using System;  
    using System.Collections.Generic;  
    using System.Linq;  
    using System.Web;  
    using System.Text;  
    using System.Data;  
    using System.Web.UI;  
    using System.Web.UI.WebControls;  

    public partial class RoleDemo20150305 : System.Web.UI.Page  
    {  
        protected void Page_Load(object sender, EventArgs e)  
        {  
            DataTable dt = createDT();  
            DataTable dtFinal = dt.Clone();  
            List<string> list = new List<string>();  

            string userStr = GetUserData();  
            if (userStr.Contains(","))  
            {  
                string[] strs = userStr.Split(',');  
                for (int i = 0; i < strs.Length; i++)  
                {  
                    list.Add(strs[i]);  
                }  
            }  
            else  
            {  
                list.Add(userStr);  
            }  

            for (int i = 0; i < list.Count; i++)  
            {  
                string module_id = list[i];  
                DataRow[] drSource = dt.Select(" module_id = '" + module_id + "'"); //最终DT是否存在该数据  
                DataRow[] drExist = dtFinal.Select(" module_id = '" + module_id + "'"); //最终DT是否存在该数据  
                if (drExist.Length == 0)  
                {  
                    dtFinal.Rows.Add(drSource[0]["module_id"], GetPreTag(drSource[0]["module_level"]) + drSource[0]["module_name"], drSource[0]["module_fatherid"],  
                        drSource[0]["module_url"], drSource[0]["module_order"], drSource[0]["module_level"]); //添加记录   
                }  
                FindFatherFromDT(dt, drSource, dtFinal);  
            }  

            //显示方式一  
            DataView dv = dtFinal.DefaultView;  
            dv.Sort = "module_id asc";  
            DataTable dtNeed = dv.ToTable();  

            GridView1.DataSource = dtNeed;  
            GridView1.DataBind();  

            //显示方式二  
            StringBuilder builder = new StringBuilder();  
            for (int i = 0; i < dtNeed.Rows.Count; i++)  
            {  
                DataRow dr = dtNeed.Rows[i];  
                builder.AppendLine("<span data-id='" + dr["module_id"] + "' data-father='" + dr["module_fatherid"] + "' style='display:none'>"  
                  + dr["module_name"] + "</span>");  
            }  
            lt1.Text = builder.ToString();  
        }  

        /// <summary>  
        /// 继续追溯添加父类记录   
        /// </summary>  
        /// <param name="dt"></param>  
        /// <param name="dtFinal"></param>  
        protected void FindFatherFromDT(DataTable dt, DataRow[] drFather, DataTable dtFinal)  
        {  
            DataRow[] drFatherUp = dt.Select(" module_id = '" + drFather[0]["module_fatherid"] + "'");  
            DataRow[] drFatherUpExist = dtFinal.Select(" module_id = '" + drFather[0]["module_fatherid"] + "'");  
            if (drFatherUp.Length > 0 &amp;&amp; drFatherUpExist.Length == 0) //该记录存在父类且父类未添加到最终DT  
            {  
                dtFinal.Rows.Add(drFatherUp[0]["module_id"], GetPreTag(drFatherUp[0]["module_level"]) + drFatherUp[0]["module_name"], drFatherUp[0]["module_fatherid"],  
                        drFatherUp[0]["module_url"], drFatherUp[0]["module_order"], drFatherUp[0]["module_level"]); //继续追溯添加父类记录     
                FindFatherFromDT(dt, drFatherUp, dtFinal);  
            }  
        }  

        #region 添加前缀  
        protected string GetPreTag(object num)  
        {  
            string pre = string.Empty;  
            int i = Convert.ToInt32(num);  
            if (i < 2)  
            {  

            }  
            else if (i == 2)  
            {  
                pre += "└";  
            }  
            else  
            {  
                pre += "└";  
                for (int j = 0; j < i - 2; j++)  
                {  
                    pre += "─";  
                }  
            }  
            return pre;  
        }  
        #endregion  

        #region 用户测试数据  
        protected static string GetUserData()  
        {  
            DataTable dt = new DataTable();  
            dt.Columns.Add("userId");  
            dt.Columns.Add("userModuleOption");  
            dt.Rows.Add("张三", "M01010305,M010205,M0101030301");  
            return dt.Rows[0]["userModuleOption"].ToString();  
        }  
        #endregion  

        #region 创建数据  
        protected static DataTable createDT()  
        {  
            DataTable dt = new DataTable();  
            dt.Columns.Add("module_id");  
            dt.Columns.Add("module_name");  
            dt.Columns.Add("module_fatherid");  
            dt.Columns.Add("module_url");  
            dt.Columns.Add("module_order");  
            dt.Columns.Add("module_level");  

            dt.Rows.Add("C1", "全国", "0", "", "1", "1");  
            dt.Rows.Add("M01", "广东", "C1", "", "1", "2");  

            //深圳  
            dt.Rows.Add("M0101", "深圳", "M01", "3.aspx", "100", "3");  
            dt.Rows.Add("M010101", "南山区", "M0101", "4.aspx", "1000", "4");  
            dt.Rows.Add("M010102", "罗湖区", "M0101", "", "1001", "4");  
            dt.Rows.Add("M010103", "福田区", "M0101", "", "1002", "4");  
            dt.Rows.Add("M010104", "宝安区", "M0101", "", "1003", "4");  
            dt.Rows.Add("M010105", "龙岗区", "M0101", "", "1004", "4");  

            //深圳 - 福田区  
            dt.Rows.Add("M01010301", "上梅林", "M010103", "", "1002001", "5");  
            dt.Rows.Add("M01010302", "下梅林", "M010103", "", "1002002", "5");  
            dt.Rows.Add("M01010303", "车公庙", "M010103", "", "1002003", "5");  
            dt.Rows.Add("M01010304", "竹子林", "M010103", "", "1002004", "5");  
            dt.Rows.Add("M01010305", "八卦岭", "M010103", "", "1002005", "5");  
            dt.Rows.Add("M01010306", "华强北", "M010103", "", "1002006", "5");  

            //深圳 - 福田区 - 车公庙  
            dt.Rows.Add("M0101030301", "天安数码城", "M01010303", "", "100200301", "6");  

            //广州  
            dt.Rows.Add("M0102", "广州", "M01", "", "101", "3");  
            dt.Rows.Add("M010201", "越秀区", "M0102", "", "1105", "4");  
            dt.Rows.Add("M010202", "海珠区", "M0102", "", "1106", "4");  
            dt.Rows.Add("M010203", "天河区", "M0102", "", "1107", "4");  
            dt.Rows.Add("M010204", "白云区", "M0102", "", "1108", "4");  
            dt.Rows.Add("M010205", "黄埔区", "M0102", "", "1109", "4");  
            dt.Rows.Add("M010206", "荔湾区", "M0102", "", "1110", "4");  
            dt.Rows.Add("M010207", "罗岗区", "M0102", "", "1111", "4");  
            dt.Rows.Add("M010208", "南沙区", "M0102", "", "1112", "4");  
            return dt;  
        }  
        #endregion  
    }  

标签:c#

收藏

0人收藏

支持

0

反对

0

发表评论