DropDownList中显示树状数据

在DropDownList中显示树状结构的数据,数据来源自Sql2005数据库。数据库的结构:三张表city,province,county。由于测试使用所以名称及其数据都是随便起的,由于频临下班时间所以代码比较混乱,只是实现功能而已。由于不知道无穷递归所以无穷级别的显示不会,如果哪位大仙做出来了,告诉我一下,谢谢了。

我的E-mail:teng_s2000@126.com

如果代码或者数据库设计上有什么好的建议欢迎指正。

程序测试环境:VS.net2005+Sql Server2005+WinXPSP2

程序运行的效果图:

二级效果如下:

二级目录的效果图 

三级的效果图如下:

三级效果图

 

附上程序的源代码:由于aspx页面中就是两个DropDownList,其余的是系统自动生成的代码,所以就省略了

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;
using System.Data.SqlClient;

public partial class DropDownList : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            bind2();
            bind3();
        }
    }
    public void bind2()//两级
    {
        SqlConnection conn = new SqlConnection(@"Data Source=teng/sqlexpress;Initial Catalog=example;Integrated Security=True");

        SqlDataAdapter sda = new SqlDataAdapter("select provinceid,provincename from province order by provinceid", conn);
        DataTable dt = new DataTable();
        try
        {
            sda.Fill(dt);
            ArrayList list = new ArrayList();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                list.Add(dt.Rows[i]["provincename"].ToString());
                string id = dt.Rows[i]["provinceid"].ToString();
                SqlConnection conn1 = new SqlConnection(@"Data Source=teng/sqlexpress;Initial Catalog=example;Integrated Security=True");
                SqlDataAdapter sda1 = new SqlDataAdapter("select cityid,cityname from city where provinceid='" + id + "'", conn1);
                DataTable dt1 = new DataTable();
                sda1.Fill(dt1);
                for (int j = 0; j < dt1.Rows.Count; j++)

                    list.Add("|—" + dt1.Rows[j]["cityname"].ToString());

            }


            DropDownList1.DataSource = list;

            DropDownList1.DataBind();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
    }

    public void bind3()//三级
    {
        SqlConnection conn = new SqlConnection(@"Data Source=teng/sqlexpress;Initial Catalog=example;Integrated Security=True");

        SqlDataAdapter sda = new SqlDataAdapter("select provinceid,provincename from province order by provinceid", conn);
        DataTable dt = new DataTable();
        try
        {
            sda.Fill(dt);
            ArrayList list = new ArrayList();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                list.Add(dt.Rows[i]["provincename"].ToString());
                string provinceid = dt.Rows[i]["provinceid"].ToString();
                SqlConnection conn1 = new SqlConnection(@"Data Source=teng/sqlexpress;Initial Catalog=example;Integrated Security=True");
                SqlDataAdapter sda1 = new SqlDataAdapter("select cityid,cityname from city where provinceid='" + provinceid + "'", conn1);
                DataTable dt1 = new DataTable();
                sda1.Fill(dt1);
                for (int j = 0; j < dt1.Rows.Count; j++)
                {
                    list.Add("|—" + dt1.Rows[j]["cityname"].ToString());
                    string cityid=dt1.Rows[j]["cityid"].ToString();
                    SqlConnection conn2 = new SqlConnection(@"Data Source=teng/sqlexpress;Initial Catalog=example;Integrated Security=True");
                    SqlDataAdapter sda2 = new SqlDataAdapter("select countyid,countyname from county where cityid='" + cityid + "' and provinceid='" + provinceid + "'", conn2);
                    DataTable dt2 = new DataTable();
                    sda2.Fill(dt2);

                    for (int k = 0; k < dt2.Rows.Count; k++)
                    {
                        list.Add("|——" + dt2.Rows[k]["countyname"].ToString());

                    }
                }

            }


            DropDownList2.DataSource = list;
           
            DropDownList2.DataBind();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
    }
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string str = DropDownList1.SelectedValue;
        if (str.IndexOf("|") > -1)
        {
            str = str.Replace("|", "").Replace("—","");
        }
        Response.Write("You choose:" + str);
    }
    protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
    {

        string str = DropDownList2.SelectedValue;
        if (str.IndexOf("|") > -1)
        {
            str = str.Replace("|", "").Replace("—", "");
        }
        Response.Write("You choose:" + str);
    }
}

 

数据库的创建代码:

Province表:

USE [example]
GO
/****** 对象:  Table [dbo].[Province]    脚本日期: 11/02/2006 18:11:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Province](
 [ProvinceID] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [ProvinceName] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
 CONSTRAINT [PK_Province] PRIMARY KEY CLUSTERED
(
 [ProvinceID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

City表:

USE [example]
GO
/****** 对象:  Table [dbo].[City]    脚本日期: 11/02/2006 18:11:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[City](
 [CityID] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [CityName] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [ProvinceID] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
 CONSTRAINT [PK_City] PRIMARY KEY CLUSTERED
(
 [CityID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

County表:

USE [example]
GO
/****** 对象:  Table [dbo].[County]    脚本日期: 11/02/2006 18:12:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[County](
 [CountyID] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,
 [CountyName] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
 [ProvinceID] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL,
 [CityID] [nchar](10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值