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

推荐一个不错的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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值