在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]