您的位置:首页 > 编程语言 > ASP

asp.net中用DropDownList实现无限级分类菜单

2007-07-26 13:18 351 查看
推荐一个不错的api参考资料网站:api之家http://www.apihome.cn/

因项目需要,要做一个菜单无限级分类,最后选择使用DroopDownList控件.时间紧急,只贴出代码,有相同需求的,可以看看

(1)数据库表说明:

PKID:不用说了吧

ClassName:类别名称

UPID:上级类别的ID(默认为0,表示一级大类)



(2)代码如下:

<1>default.aspx页面代码如下:

<%@ 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" runat="server">

<div>

<asp:PlaceHolder ID="PH" runat="server"></asp:PlaceHolder>

<asp:Button ID="btn_Enter" runat="server" OnClick="btn_Enter_Click" Text=" 确定 " /></div>

</form>

</body>

</html>

<2>default.aspx.cs代码如下:

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.SqlClient;

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

ArrayList al;

if (Session["Controls"] != null)

{

al = (ArrayList)Session["Controls"];

PH.Controls.Clear();

for (int i = 0; i < al.Count; i++)

{

DropDownList ddl = (DropDownList)al[i];

ddl.SelectedIndexChanged += new EventHandler(dl_SelectedIndexChanged);

PH.Controls.Add(ddl);

}

}

if (!IsPostBack)

{

CreateControls("select * from t_sj_classinfo where upid=0", 0);

}

}

void CreateControls(string sql, int CurID)

{

ArrayList al;

if (Session["Controls"] == null)

al = new ArrayList();

else

{

al = (ArrayList)Session["Controls"];

for (int i = 0; i < al.Count; i++)

{

DropDownList ddl_Remove = (DropDownList)al[i];

if (Convert.ToInt32(ddl_Remove.ID) > CurID)

{

i--;

al.Remove(ddl_Remove);

PH.Controls.Remove(ddl_Remove);

}

}

}

SqlConnection conn = new SqlConnection("server=localhost;uid=sa;pwd=123456;database=test");

SqlCommand cmd = new SqlCommand(sql, conn);

DataTable dt = new DataTable();

SqlDataAdapter drp = new SqlDataAdapter(cmd);

drp.Fill(dt);

if (dt.Rows.Count > 0)

{

DropDownList dl = new DropDownList();

CurID++;

dl.ID = CurID.ToString();

dl.AutoPostBack = true;

dl.SelectedIndexChanged += new EventHandler(dl_SelectedIndexChanged);

dl.DataSource = dt;

dl.DataTextField = "ClassName";

dl.DataValueField = "PKID";

dl.DataBind();

dl.Items.Insert(0, new ListItem("--请选择--", "0"));

al.Add(dl);

PH.Controls.Add(dl);

Session["Controls"] = al;

}

}

void dl_SelectedIndexChanged(object sender, EventArgs e)

{

DropDownList dl = (DropDownList)sender;

string LBID = dl.SelectedValue;

CreateControls("select * from t_sj_classinfo where upid=" + LBID, Convert.ToInt32(dl.ID));

}

protected void btn_Enter_Click(object sender, EventArgs e)

{

ControlCollection Ctl = PH.Controls;

System.Text.StringBuilder sb = new System.Text.StringBuilder();

foreach (Control c in Ctl)

{

//如果PH中还有其它的服务器控件,此处必须加入服务器控件类型的判断

DropDownList dl = (DropDownList)c;

sb.Append("选中的文本:" + dl.SelectedItem.Text + " 选中的值:" + dl.SelectedItem.Value + "<br/>");

}

Response.Write(sb.ToString());

}

}

最后显示的结果页面样例如:



这个程序,还有许多可以改进的地方,呵呵,欢迎交流.QQ:54008383

推荐一个不错的api参考资料网站:api之家http://www.apihome.cn/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: