本文实例讲述了C#递归方法实现无限级分类显示效果。分享给大家供大家参考,具体如下:
运行效果如下图所示:

具体代码如下:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<%@ 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>
|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
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 && 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#程序设计有所帮助。








发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。