转载笔记:DropDownList无限级分类(灵活控制显示形式)
主要使用递归实现,数据库结构:
最终样式:

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

源码下载:
http://files.cnblogs.com/chensubo/RecursionDemo.rar
改造过的函数
// <asp:DropDownList ID="editparentid" runat="server" ></asp:DropDownList>
- /// <summary>
- /// 加载页面
- ///</summary>
- protected void Page_Load(object sender, EventArgs e)
- {
- BindDrpClass(editparentid);}
/// <summary>
- /// 创建树
- /// </summary>
- public void BindDrpClass(DropDownList ddlClass)
- {
- DataTable dt = DbHelper.ExecuteDataset(SysConst.DBNAME_XIAOWU, "select * from NT_Clcs_ClientType").Tables[0];
- ddlClass.Items.Clear();
- ddlClass.Items.Add(new ListItem("添加根栏目", "0"));
- DataRow[] drs = dt.Select("ParentID= " + 0);
- foreach (DataRow dr in drs){
- string classid = dr["Cc_ID"].ToString();
- string classname = dr["Cc_Name"].ToString();
- //顶级分类显示形式
- classname = "╋" + classname;
- ddlClass.Items.Add(new ListItem(classname, classid));
- int sonparentid = int.Parse(classid);
- string blank = "├";
- //递归子分类方法
- BindNode(ddlClass, sonparentid, dt, blank);
- }
- editparentid.DataBind();
- }
- /// <summary>
- /// 创建树结点
- /// </summary>
- private void BindNode(DropDownList ddlNode, int parentid, DataTable dt, string blank)
- {
- DataRow[] drs = dt.Select("ParentID= " + parentid);
- foreach (DataRow dr in drs){
- string classid = dr["Cc_ID"].ToString();
- string classname = dr["Cc_Name"].ToString();
- classname = blank + classname;
- ddlNode.Items.Add(new ListItem(classname, classid));
- int sonparentid = int.Parse(classid);
- string blank2 = blank + "─";
- BindNode(ddlNode,sonparentid, dt, blank2);
- }
- }
二次改造做成一个通用的类 调用 如: new DrpGradingList("select * from dbo.NT_Clcs_ClientType ", "Cc_Name", "Cc_ID", defValue).BindDrpClass(ddl);
- /// <summary>
- /// DropDownList 树形显示
- /// </summary>
- public class DrpGradingList
- {
- private string Sql = "";
- private string Text = "";
- private string Value = "";
- private string defValue = "";
- private string parentId = "ParentID";
- /// <summary>
- /// DropDownList 树形显示
- /// </summary>
- /// <param name="sql">SQL语句</param>
- /// <param name="text">显示的文本( 数据库字段)</param>
- /// <param name="value">显示的文本对应的值( 数据库字段)</param>
- public DrpGradingList(string sql, string text, string value, string defvalue)
- {
- this.Sql = sql;
- this.Text = text;
- this.Value = value;
- this.defValue = defvalue;
- }
- /// <summary>
- /// DropDownList 树形显示
- /// </summary>
- /// <param name="sql">SQL语句</param>
- /// <param name="text">显示的文本( 数据库字段)</param>
- /// <param name="value">显示的文本对应的值( 数据库字段)</param>
- public DrpGradingList(string sql, string text, string value, string defvalue,string pid)
- {
- this.Sql = sql;
- this.Text = text;
- this.Value = value;
- this.defValue = defvalue;
- this.parentId = pid;
- }
- /// <summary>
- /// 创建树
- /// </summary>
- public void BindDrpClass(DropDownList ddlClass)
- {
- DataTable dt = DbHelper.ExecuteDataset(SysConst.DBNAME_XIAOWU, Sql).Tables[0];
- ddlClass.Items.Clear();
- ddlClass.Items.Add(new ListItem("顶级栏目", "0"));
- DataRow[] drs = dt.Select(""+this.parentId+"= " + 0);
- foreach (DataRow dr in drs)
- {
- string classid = dr[this.Value].ToString();
- string classname = dr[this.Text].ToString();
- //顶级分类显示形式
- classname = "╋" + classname;
- ListItem itme = new ListItem();
- itme.Text=classname;
- itme.Value=classid;
- if (itme.Value.Equals(this.defValue))
- itme.Selected = true;
- ddlClass.Items.Add(itme);
- int sonparentid = int.Parse(classid);
- string blank = "├";
- //递归子分类方法
- BindNode(ddlClass, sonparentid, dt, blank);
- }
- ddlClass.SelectedIndex = ddlClass.Items.IndexOf(ddlClass.Items.FindByValue(this.defValue));
- ddlClass.DataBind();
- }
- /// <summary>
- /// 创建树 ddlClass.Items.Add(new ListItem("顶级栏目", "0"));
- /// </summary>
- public void BindDrpClass(DropDownList ddlClass, bool defItem)
- {
- DataTable dt = DbHelper.ExecuteDataset(SysConst.DBNAME_XIAOWU, Sql).Tables[0];
- ddlClass.Items.Clear();
- if (defItem){
- ddlClass.Items.Add(new ListItem("顶级栏目", "0"));
- }
- DataRow[] drs = dt.Select("" + this.parentId + "= " + 0);
- foreach (DataRow dr in drs)
- {
- string classid = dr[this.Value].ToString();
- string classname = dr[this.Text].ToString();
- //顶级分类显示形式
- classname = "╋" + classname;
- ListItem itme = new ListItem();
- itme.Text = classname;
- itme.Value = classid;
- if (itme.Value.Equals(this.defValue))
- itme.Selected = true;
- ddlClass.Items.Add(itme);
- int sonparentid = int.Parse(classid);
- string blank = "├";
- //递归子分类方法
- BindNode(ddlClass, sonparentid, dt, blank);
- }
- ddlClass.SelectedIndex = ddlClass.Items.IndexOf(ddlClass.Items.FindByValue(this.defValue));
- ddlClass.DataBind();
- }
- public void BindDrpClass(DropDownList ddlClass, bool defItem,string parentIdefVale)
- {
- if (parentIdefVale.Length == 0) parentIdefVale = "0";
- DataTable dt = DbHelper.ExecuteDataset(SysConst.DBNAME_XIAOWU, Sql).Tables[0];
- ddlClass.Items.Clear();
- if (defItem)
- {
- ddlClass.Items.Add(new ListItem("顶级栏目", "0"));
- }
- DataRow[] drs = dt.Select("" + this.parentId + "= " + parentIdefVale);
- foreach (DataRow dr in drs)
- {
- string classid = dr[this.Value].ToString();
- string classname = dr[this.Text].ToString();
- //顶级分类显示形式
- classname = "╋" + classname;
- ListItem itme = new ListItem();
- itme.Text = classname;
- itme.Value = classid;
- if (itme.Value.Equals(this.defValue))
- itme.Selected = true;
- ddlClass.Items.Add(itme);
- int sonparentid = int.Parse(classid);
- string blank = "├";
- //递归子分类方法
- BindNode(ddlClass, sonparentid, dt, blank);
- }
- ddlClass.SelectedIndex = ddlClass.Items.IndexOf(ddlClass.Items.FindByValue(this.defValue));
- ddlClass.DataBind();
- }
- /// <summary>
- /// 创建树结点
- /// </summary>
- private void BindNode(DropDownList ddlNode, int parentid, DataTable dt, string blank)
- {
- DataRow[] drs = dt.Select(""+this.parentId+"= " + parentid);
- foreach (DataRow dr in drs)
- {
- string classid = dr[this.Value].ToString();
- string classname = dr[this.Text].ToString();
- classname = blank + classname;
- ListItem itme = new ListItem();
- itme.Text = classname;
- itme.Value = classid;
- if (itme.Value.Equals(this.defValue))
- itme.Selected = true;
- ddlNode.Items.Add(itme);
- int sonparentid = int.Parse(classid);
- string blank2 = blank + "─";
- BindNode(ddlNode, sonparentid, dt, blank2);
- }
- }
- }
RadTreeView控件 应用:
- <telerik:RadTreeView runat="server" ID="RadTreeView2" Skin="Office2007"
- Width="300px" Height="450px" CheckBoxes="True" DataTextField="ParentID"
- TriStateCheckBoxes="False">
- </telerik:RadTreeView>
- AddTree("0", this.RadTreeView2.Nodes);
- public void AddTree(string fdm, RadTreeNodeCollection nodes)
- {
- DataTable dt = DbHelper.ExecuteDataset(SysConst.DBNAME_XIAOWU, "select * from NT_Clcs_Village where ParentID=" + fdm + "").Tables[0];
- foreach (DataRow dr in dt.Rows)
- {
- string classid = dr["Cv_ID"].ToString();
- string classname = dr["Cv_Name"].ToString();
- RadTreeNode main = new RadTreeNode();
- main.Text = classname;
- main.Value = classid;
- nodes.Add(main);
- AddTree(classid, main.Nodes);
- }
- }
其它:
dropDownList.SelectedIndex=dropDownList.Items.IndexOf(dropDownList.Items.FindByText(entityBase.Bugstatus));
MVC树形:
使用: @Html.DropDownList("ddlXzqy", ViewData["ddlXzqy"] as IEnumerable<SelectListItem>)
/// <summary> /// 创建树 /// </summary> public void BindDrpClass(Guid selectId) { var list = repo.GetXzqyRootsList(); List<SelectListItem> selitem = new List<SelectListItem>(); foreach ( var item in list) { //顶级分类显示形式 if (selectId == item.ID) { selitem.Add( new SelectListItem { Text = "╋" + item.Name, Value = item.ID.ToString(), Selected = true }); this .ViewData[ "selected" ] = item.ID.ToString(); } else { selitem.Add( new SelectListItem { Text = "╋" + item.Name, Value = item.ID.ToString() }); } //递归子分类方法 string blank = "├" ; BindNode(item.ID, blank, selitem, selectId); } selitem.Insert(0, new SelectListItem { Text = "==行政区域==" , Value = "-1" }); ViewData[ "ddlXzqy" ] = selitem; } private void BindNode(Guid parentid, string blank, List<SelectListItem> selitem, Guid selectId) { var list = repo.GetXzqyChildList(parentid); foreach ( var item in list) { if (selectId == item.ID) { selitem.Add( new SelectListItem { Text = blank + item.Name, Value = item.ID.ToString(), Selected = true }); this .ViewData[ "selected" ] = item.ID.ToString(); } else { selitem.Add( new SelectListItem { Text = blank + item.Name, Value = item.ID.ToString() }); } string blank2 = blank + "─" ; BindNode(item.ID, blank2, selitem, selectId); } } |
转载笔记:DropDownList无限级分类(灵活控制显示形式)的更多相关文章
- C#无限级分类递归显示示例
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="RoleDemo20150305 ...
- 2强类型DataSet (2011-12-30 23:16:59)转载▼ 标签: 杂谈 分类: Asp.Net练习笔记 http://blog.sina.com.cn/s/blog_9d90c4140101214w.html
强类型DataSet (2011-12-30 23:16:59) 转载▼ 标签: 杂谈 分类: Asp.Net练习笔记 using System; using System.Collections.G ...
- 强类型DataSet (2011-12-30 23:16:59)转载▼ 标签: 杂谈 分类: Asp.Net练习笔记 http://blog.sina.com.cn/s/blog_9d90c4140101214w.html
强类型DataSet (2011-12-30 23:16:59) 转载▼ 标签: 杂谈 分类: Asp.Net练习笔记 using System; using System.Collections.G ...
- MVC无限级分类02,增删改查
继上一篇"MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射",本篇开始MVC无限级分类的增删改查部分,源码在github. 显示和查询 使用datagrid显 ...
- PHP递归实现无限级分类
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...
- mysql无限级分类
第一种方案: 使用递归算法,也是使用频率最多的,大部分开源程序也是这么处理,不过一般都只用到四级分类. 这种算法的数据库结构设计最为简单.category表中一个字段id,一个字段fid(父id).这 ...
- (实用篇)PHP递归实现无限级分类
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...
- PHP无限级分类-递归(不推荐)
[http://www.helloweba.com/view-blog-204.html] 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢? ...
- STM32学习笔记(四)——串口控制LED(中断方式)
目录: 一.时钟使能,包括GPIO的时钟和串口的时钟使能 二.设置引脚复用映射 三.GPIO的初始化配置,注意要设置为复用模式 四.串口参数初始化配置 五.中断分组和中断优先级配置 六.设置串口中断类 ...
随机推荐
- C#设计模式 —— 工厂模式
. 工厂模式同样是项目中最常用的设计模式,工厂模式中又分为简单工厂,工厂方法,抽象工厂.下面我们由简单的开始逐一介绍. 1.简单工厂模式 简单工厂又被称为静态工厂,在设计模式中属于创建型模式.主要解决 ...
- No active profile set, falling back to default profiles: default
No active profile set, falling back to default profiles: default 这个错误是由于idea没有设置默认启动环境,设置即可
- 安装Maven后使用cmd 执行 mvn -version命令 报错JAVA_HOME should point to a JDK not a JRE
1. 可以执行maven指令,说明maven的配置没错 2. 打开cmd,在cmd输入: set JAVA_HOME=D:\Program Files\Java\jdk1.8.0_91 3. 再测试是 ...
- Altium Designer (DXP) 复制粘贴,放器件 出错报异常的原因
安装好Altium Designer (DXP) 09板和2013后,运行后原理图复制粘贴元件或者放心的器件后出现下面异常, 原因是: 1.未启动 Print Spooler服务 2.没有安装任何打印 ...
- Home Assistant系列 -- 设置界面语言与地理位置
Home Assistant 安装的时候会自动根据你的系统语言设置默认语言,安装完成以后也可以根据需要自己设置选择语言.启动 Home Assistant ,浏览器打开web 界面,点击左上角的用户图 ...
- 网站sql注入漏洞修复方案之metinfo 6.1.0系列
近日,我们SINE安全对metinfo进行网站安全检测发现,metinfo米拓建站系统存在高危的sql注入漏洞,攻击者可以利用该漏洞对网站的代码进行sql注入攻击,伪造恶意的sql非法语句,对网站的数 ...
- Mac使用bootcamp安装win系统花屏解决方法
15年11'乞丐版air装win屏幕花屏,很郁闷,先后找了网上很多方法,最终总结出了一个比较折中的方法,不玩游戏不使用大型3D的可以参考. 1 花屏现象 2 解决方法 2.1 禁用驱动 2.2 使用M ...
- Python学习笔记——常用的内置函数
一.yield def EricReadlines(): seek = 0 while True: with open('D:/temp.txt','r') as f: f.seek(seek) da ...
- 基于 OpenResty 实现一个 WS 聊天室
基于 OpenResty 实现一个 WS 聊天室 WebSocket WebSocket 协议分析 WebSocket 协议解决了浏览器和服务器之间的全双工通信问题.在WebSocket出现之前,浏览 ...
- WPF自定义命令
WPF的自定义命令实现过程包括三个部分,定义命令.定义命令源.命令调用,代码实现如下: public partial class MainWindow : Window { public MainWi ...