DropDownList无限级分类(灵活控制显示形式)
2013-01-28 11:05
302 查看
前台,aspx页面,只需要一个dropdownlist,textbox,button控件<body><form id="form1" runat="server"><asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="添 加" /></form></body>数据库我选用的是access数据库,字段设置如图:连接数据库省略自己写吧后台页面代码aspx.cs(不能再仔细了):using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;public partial class Default2 : System.Web.UI.Page{cx c = new cx();protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){BindDropdownList();//页面加载}}protected void BindDropdownList()//绑定dropdownlist实现商品类型无限级分类{DataTable dt = new DataTable();try{string sql = "select * from TB_Class1";dt = c.getdataSet(sql, "s").Tables[0];CreateLevelDropDown(this.DropDownList1, dt);}catch (Exception) { }}/// <summary>/// 创建分级下拉框/// </summary>/// <param name="ddlst"></param>/// <param name="dt"></param>private void CreateLevelDropDown(DropDownList ddlst, DataTable dt){System.Collections.ArrayList allItems = new ArrayList();DataRow[] rows = dt.Select("[parent_id]=" + 0);foreach (DataRow row in rows)CreateLevelDropDownAssistant(dt, ref allItems, row, string.Empty);ListItem[] items = new ListItem[allItems.Count];allItems.CopyTo(items);ddlst.Items.AddRange(items);}private void CreateLevelDropDownAssistant(DataTable dt, ref ArrayList items, DataRow parentRow, string curHeader){ListItem newItem = new ListItem(curHeader + parentRow["class_name"].ToString(), parentRow["class_id"].ToString());items.Add(newItem);parentRow.Delete();DataRow[] rows = dt.Select("[parent_id]='" + newItem.Value + "'");for (int i = 0; i < rows.Length - 1; i++)CreateLevelDropDownAssistant(dt, ref items, rows[i], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┣");if (rows.Length > 0)CreateLevelDropDownAssistant(dt, ref items, rows[rows.Length - 1], curHeader.Replace("┣", "┃").Replace("┗", "┣") + "┗");}protected void Button1_Click(object sender, EventArgs e)//添加分类{int id = Convert.ToInt32(this.DropDownList1.SelectedValue);string sql = "";if (id == 1)//表示是根目录{sql = "insert into TB_Class1 (parent_id,class_name) values ('" + id + "','" + this.TextBox1.Text + "')";c.ExeSql(sql);Response.Write("<script>alert('跟栏目添加成功!')</script>");}else//在根栏目下添加子栏目{sql = "insert into TB_Class1 (parent_id,class_name) values ('" + id + "','" + this.TextBox1.Text + "')";c.ExeSql(sql);Response.Write("<script>alert('子栏目添加成功!')</script>");}this.DropDownList1.Items.Clear();//清空dropdownlistBindDropdownList();//重新加载,添加数据完全显示}}显示效果,如图:显示另一效果:这种效果前台显示一样,数据库设计如下:后台代码如下:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Collections;using System.Data.OleDb;public partial class _Default : System.Web.UI.Page{cx c = new cx();protected void Page_Load(object sender, EventArgs e){if(!Page.IsPostBack){BindDrpClass();}}protected void Button1_Click(object sender, EventArgs e){int id = Convert.ToInt32(this.DropDownList1.SelectedValue);string sql = "";if (id == 0)//表示是根目录{sql = "insert into TB_Class2 (parent_id,class_name) values ('" + id + "','" + this.TextBox1.Text + "')";c.ExeSql(sql);Response.Write("<script>alert('跟栏目添加成功!')</script>");}else//在根栏目下添加子栏目{sql = "insert into TB_Class2 (parent_id,class_name) values ('" + id + "','" + this.TextBox1.Text + "')";c.ExeSql(sql);Response.Write("<script>alert('子栏目添加成功!')</script>");}this.DropDownList1.Items.Clear();//清空dropdownlistBindDrpClass();//重新加载,添加数据完全显示}private void BindDrpClass(){string sql = "select * from TB_Class2";DataTable dt = c.getdataSet(sql, "s").Tables[0];this.DropDownList1.Items.Add(new ListItem("添加根栏目", "0"));DataRow[] drs = dt.Select("parent_id= " + 0);foreach (DataRow dr in drs){string classid = dr["class_id"].ToString();string classname = dr["class_name"].ToString();//顶级分类显示形式classname = "╋" + classname;this.DropDownList1.Items.Add(new ListItem(classname, classid));int sonparentid = int.Parse(classid);string blank = "├";//递归子分类方法BindNode(sonparentid, dt, blank);}this.DropDownList1.DataBind();}//绑定子分类private void BindNode(int parentid, DataTable dt, string blank){DataRow[] drs = dt.Select("parent_id= " + parentid);foreach (DataRow dr in drs){string classid = dr["class_id"].ToString();string classname = dr["class_name"].ToString();classname = blank + classname;this.DropDownList1.Items.Add(new ListItem(classname, classid));int sonparentid = int.Parse(classid);string blank2 = blank + "─";BindNode(sonparentid, dt, blank2);}}}其实这两种方法相同,显示效果不一样而已,大家尽情交流!!!
相关文章推荐
- 笔记:DropDownList无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式)
- 转载笔记:DropDownList无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式) ASP.net|论坛 - 深博技术论坛 - Powered by Discuz!NT
- DropDownList无限级分类(灵活控制显示形式)ASP.net|论坛
- DropDownList无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式)
- 笔记:DropDownList无限级分类(灵活控制显示形式)
- DropDownList 无限级分类 树状显示 (递归)
- php 无限级分类以及树型显示分类关系
- CSS浮动属性,知道原理就很简单,灵活控制块级元素在一行内显示
- asp.net实现递归方法取出菜单并显示在DropDownList中(分栏形式)
- 关于android BaseAdapter 中如何灵活控制listview 是否显示,是否有事件触发
- 如何通过动态生成Html灵活实现DataGrid分类统计的界面显示功能