DropDownList无限级分类(灵活控制显示形式)
来源:互联网 发布:炉石代练软件 编辑:程序博客网 时间:2024/06/05 23:52
前台,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();//清空dropdownlist
BindDropdownList();//重新加载,添加数据完全显示
}
}
显示效果,如图:
显示另一效果:
这种效果前台显示一样,数据库设计如下:
后台代码如下:
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();//清空dropdownlist
BindDrpClass();//重新加载,添加数据完全显示
}
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无限级分类(灵活控制显示形式)
- DropDownList无限级分类(灵活控制显示形式)ASP.net|论坛
- DropDownList无限级分类(灵活控制显示形式) ASP.net|论坛 - 深博技术论坛 - Powered by Discuz!NT
- DropDownList 无限级分类 树状显示 (递归)
- DropDownList 无限级分类
- DropDownList无限级分类
- DropDownList 无限级分类
- DropDownList 无限级分类
- DropDownList实现无限级分类
- DropDownList实现无限级分类
- 2010年11月江西IDC服务商排名报告
- 获取root权限及破解原理分析
- android stagefright系列 ---- stagefright框架(一)Video Playback的流程 .
- VNC配置linux与windows之间复制粘贴
- 关于js 中 trim
- DropDownList无限级分类(灵活控制显示形式)
- 可视化编程的游戏引擎让iOS游戏开发像做沙拉一样简单
- commons-io之filefilter学习
- python中list操作详解
- Java SSL 服务器 客户端通信 试用
- jfreechart使用
- base64编码
- common-io之Comparator阅读
- IE开发人员工具不显示的解决方法