DropdownList下拉式菜单,无限分类的
分类A
├分类A1
分类B
├分类B1
│├分类B2
高手帮忙啊!!
数据库设计(ACCESS或SQL都可以啊)
classid自动编号
pid 数字
classname文本 分类名称后台有个添加页面,
前台DropdownList下拉式菜单,无限分类的望CSDN的大虾帮忙啊!!!!那位大哥能不能给个详细的代码啊。。
求求CSDN的大哥们拉
急用啊。。毕业论文用啊!!!!
我上次的毕业论文被打下来了啊!!!
分类A
├分类A1
分类B
├分类B1
│├分类B2
高手帮忙啊!!
数据库设计(ACCESS或SQL都可以啊)
classid自动编号
pid 数字
classname文本 分类名称后台有个添加页面,
前台DropdownList下拉式菜单,无限分类的望CSDN的大虾帮忙啊!!!!那位大哥能不能给个详细的代码啊。。
求求CSDN的大哥们拉
急用啊。。毕业论文用啊!!!!
我上次的毕业论文被打下来了啊!!!
/// 模拟分级显示的下拉框 的摘要说明。
/// </summary>
public class 模拟分级显示的下拉框 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DropDownList DropDownList1; private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
DataTable myData = this.GetDataFromDB();
CreateLevelDropDown(this.DropDownList1,myData);
}
} /// <summary>
/// 从数据库读取
/// </summary>
/// <returns></returns>
private DataTable GetDataFromDB()
{
DataTable dt = new DataTable(); System.Data.OleDb.OleDbConnection cnn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='d:/test.mdb'");
System.Data.OleDb.OleDbCommand cm = new System.Data.OleDb.OleDbCommand();
cm.Connection = cnn;
cm.CommandText = "select classid,pid,classname from ClassTable";
System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cm);
da.Fill(dt);
return dt;
} /// <summary>
/// 创建分级下拉框
/// </summary>
private void CreateLevelDropDown(DropDownList ddlst,DataTable dt)
{
System.Collections.ArrayList allItems = new ArrayList();
DataRow[] rows = dt.Select("[pID]='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["className"].ToString(),parentRow["classID"].ToString());
items.Add(newItem);
parentRow.Delete(); DataRow[] rows = dt.Select("[pID]='"+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("┗",".")+"┗");// foreach(DataRow row in rows)
// CreateLevelDropDownAssistant(dt,ref items,row,curHeader.Replace("┣","┃")+"┣");
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Web;
using System.Collections;
using System.Web.Security;
using System.Web.UI;
using System.Web.Handlers;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!IsPostBack)
{
DataTable myData = this.CreateTestData(); CreateLevelDropDown(this.DropDownList1, myData);
}
} /// <summary>
/// 模拟一些测试数据,应用时改为从数据库读取
/// </summary>
/// <returns></returns>
private DataTable CreateTestData()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("ParentID", typeof(string));
dt.Columns.Add("TypeName", typeof(string));
dt.Rows.Add(new object[] { 1, 0, "一级分类" });//假定顶级节点只有一个,并且ParentID为0
dt.Rows.Add(new object[] { 2, 1, "二级分类1" });
dt.Rows.Add(new object[] { 3, 1, "二级分类2" });
dt.Rows.Add(new object[] { 4, 3, "三级分类2" });
dt.Rows.Add(new object[] { 5, 1, "二级分类3" });
dt.Rows.Add(new object[] { 6, 5, "三级分类3" });
dt.Rows.Add(new object[] { 7, 6, "四级分类3" });
dt.Rows.Add(new object[] { 8, 3, "三级AAAA" });
dt.Rows.Add(new object[] { 9, 3, "三级BBBB" });
dt.Rows.Add(new object[] { 10, 1, "二级ZZZZ" }); dt.AcceptChanges();
return dt;
} /// <summary>
/// 创建分级下拉框
/// </summary>
private void CreateLevelDropDown(DropDownList ddlst, DataTable dt)
{
System.Collections.ArrayList allItems = new ArrayList();
DataRow[] rows = dt.Select("[ParentID]='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["TypeName"].ToString(), parentRow["ID"].ToString());
items.Add(newItem);
parentRow.Delete(); DataRow[] rows = dt.Select("[ParentID]='" + 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("┗", ".") + "┗"); // foreach(DataRow row in rows)
// CreateLevelDropDownAssistant(dt,ref items,row,curHeader.Replace("┣","┃")+"┣");
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
} /// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
---------------------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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>前台显示页面</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:DropDownList id="DropDownList1" runat="server" Width="360px"></asp:DropDownList>
</form>
</body>
</html>
----------------------------
我已经知道做了,但是添加数据分类该怎么做法呢,,大哥!!!
没办法,我只是一般的专科院校!!
前台就是和你发给我一样,显示的DropDownList下拉式菜单后台添加界面也上DropDownList下拉式的!!!
谢谢大哥了!
这次论坛过关就靠你了
classid自动编号
pid 数字
classname文本 分类名称
字段名称其他的没事!!!
后台一个添加无限分类的,添加程序,
前台就是和你发给我一样,显示的DropDownList下拉式菜单
后台添加界面也上DropDownList下拉式的!!!谢谢大哥了!
这次论文过关就靠你了,谢谢你啦!毕业证就靠,大哥了!!
谢谢了!!数据库设计(ACCESS或SQL都可以啊)
classid自动编号
pid 数字 上一级
Did 数字 (深度)可省去
classname文本 分类名称
字段名称其他的没事!!!
B/S如果有的话,记得发给我一份,.,,
如果你需要C/S的,我可以发给你一份
<FONT face="宋体">
<TABLE id="Table1" cellSpacing="2" cellPadding="2" width="98%" border="0">
<TR>
<TD>
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False">
<SelectedItemStyle BackColor="#FFFF80"></SelectedItemStyle>
<Columns>
<asp:ButtonColumn Text="选择" CommandName="Select"></asp:ButtonColumn>
<asp:BoundColumn DataField="classid" ReadOnly="True" HeaderText="类别编号"></asp:BoundColumn>
<asp:BoundColumn DataField="classname" ReadOnly="True" HeaderText="类别名称"></asp:BoundColumn>
<asp:BoundColumn DataField="pid" ReadOnly="True" HeaderText="上级分类编号"></asp:BoundColumn>
<asp:ButtonColumn Text="删除" CommandName="Delete"></asp:ButtonColumn>
</Columns>
</asp:DataGrid></TD>
</TR>
<TR>
<TD style="HEIGHT: 28px">
<asp:Button id="btnAdd" runat="server" Text="添加新类"></asp:Button></TD>
</TR>
<TR>
<TD>
<asp:Panel id="Panel1" runat="server" Width="100%" Enabled="False">
<TABLE>
<TR>
<TD align="right">分类名称:</TD>
<TD>
<asp:TextBox id="txtName" runat="server" Width="160px"></asp:TextBox></TD>
</TR>
<TR>
<TD align="right">上级分类:</TD>
<TD>
<asp:DropDownList id="DropDownList1" runat="server" Width="165px"></asp:DropDownList></TD>
</TR>
<TR>
<TD align="right">
<asp:TextBox id="txtID" runat="server" Visible="False"></asp:TextBox></TD>
<TD>
<asp:Button id="btnSave" runat="server" Text="保存"></asp:Button></TD>
</TR>
</TABLE>
</asp:Panel></TD>
</TR>
</TABLE>
</FONT>
</form>
================================================================
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.Panel Panel1;
protected System.Web.UI.WebControls.Button btnAdd;
protected System.Web.UI.WebControls.Button btnSave;
protected System.Web.UI.WebControls.TextBox txtName;
protected System.Web.UI.WebControls.TextBox txtID;
protected System.Web.UI.WebControls.DropDownList DropDownList1; private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
this.BindData();
}
} private void BindData()
{
System.Data.OleDb.OleDbConnection cnn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='d:/test.mdb'");
System.Data.OleDb.OleDbCommand cm = new System.Data.OleDb.OleDbCommand();
cm.Connection = cnn;
cm.CommandText = "select classid,pid,classname from ClassTable";
System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cm);
DataTable dt = new DataTable();
da.Fill(dt);
cnn.Dispose();
this.DataGrid1.DataSource = dt;
this.DataGrid1.DataBind(); CreateLevelDropDown(this.DropDownList1,dt);
this.btnSave.Text = "保存";
} /// <summary>
/// 创建分级下拉框
/// </summary>
private void CreateLevelDropDown(DropDownList ddlst,DataTable dt)
{
System.Collections.ArrayList allItems = new ArrayList();
DataRow[] rows = dt.Select("[pID]='0'");
foreach(DataRow row in rows)
CreateLevelDropDownAssistant(dt,ref allItems,row,string.Empty); ddlst.Items.Clear();
ListItem[] items = new ListItem[allItems.Count];
allItems.CopyTo(items);
ddlst.Items.AddRange(items);
ddlst.Items.Insert(0,new ListItem("<- 无 ->","0"));
}
private void CreateLevelDropDownAssistant(DataTable dt,ref ArrayList items,DataRow parentRow,string curHeader)
{
ListItem newItem = new ListItem(curHeader+parentRow["className"].ToString(),parentRow["classID"].ToString());
items.Add(newItem);
parentRow.Delete(); DataRow[] rows = dt.Select("[pID]='"+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("┗",".")+"┗"); // foreach(DataRow row in rows)
// CreateLevelDropDownAssistant(dt,ref items,row,curHeader.Replace("┣","┃")+"┣");
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
this.DataGrid1.SelectedIndexChanged += new System.EventHandler(this.DataGrid1_SelectedIndexChanged);
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
this.btnSave.Click += new System.EventHandler(this.btnSave_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void btnAdd_Click(object sender, System.EventArgs e)
{
this.txtID.Text = string.Empty;
this.txtName.Text = string.Empty;
this.DropDownList1.SelectedIndex = 0; this.Panel1.Enabled = true;
this.btnSave.Text = "保存新类别";
} private void DataGrid1_SelectedIndexChanged(object sender, System.EventArgs e)
{
this.txtID.Text = this.DataGrid1.SelectedItem.Cells[1].Text;
this.txtName.Text = this.DataGrid1.SelectedItem.Cells[2].Text;
this.DropDownList1.SelectedValue = this.DataGrid1.SelectedItem.Cells[3].Text;
this.Panel1.Enabled = true;
this.btnSave.Text = "保存所做修改";
} private void btnSave_Click(object sender, System.EventArgs e)
{
if(this.txtName.Text.Trim() == string.Empty)
{
Response.Write("<script>alert('请输入类别名称');</script>");
return;
} System.Data.OleDb.OleDbConnection cnn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='d:/test.mdb'");
System.Data.OleDb.OleDbCommand cm = new System.Data.OleDb.OleDbCommand();
cm.Connection = cnn;
if(this.txtID.Text.Trim() == string.Empty)
{
cm.CommandText = "insert into classtable (pid,classname) values (?,?)";
cm.Parameters.Add("@pid",Convert.ToInt32(this.DropDownList1.SelectedValue));
cm.Parameters.Add("@classname",this.txtName.Text);
}
else
{
cm.CommandText = "update classtable set pid=?,classname=? where classid=?";
cm.Parameters.Add("@pid",Convert.ToInt32(this.DropDownList1.SelectedValue));
cm.Parameters.Add("@classname",this.txtName.Text);
cm.Parameters.Add("@classid",Convert.ToInt32(this.txtID.Text));
} cnn.Open();
try
{
cm.ExecuteNonQuery();
cnn.Close();
Response.Write("<script>alert('保存成功!');</script>"); this.BindData();
this.Panel1.Enabled = false;
}
catch(System.Exception ex)
{
Response.Write("<script>alert('保存失败!"+ex.Message+"');</script>");
}
finally
{
cnn.Close();
cnn.Dispose();
}
} private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
//删除功能省略
}
}