DropDownList绑定数据表实现两级联动示例

所属分类: 网络编程 / ASP.NET 阅读数: 1090
收藏 0 赞 0 分享
场景一:平时我们在DropDownList控件下添加下拉选项时,都会使用它的Item.Add方法,直接在代码下添加。如果我们想添加或修改下拉选项,则必须去修改源代码。如果几个DropDownList控件的下拉选项相同,我们则需要重复添加好多次,后期的维护工作很不方便。

场景二:我们在12306网站买票时,肯定遇到过这么一种情景:我们需要先选定目的地的省份,选完省份后在城市选框中会自动加载该省份的城市,实现两级联动。

针对以上两个场景,我们可以用DropDownList直接绑定数据表,根据选择的省份动态加载该省份下的城市。光说不练,不是好汉,让我用一个小Demo来大家演示下详细过程吧。

首先我们需要在数据库中建立两个表,一个是Province(省份)表,一个是City(城市)表。建表语句如下:
复制代码 代码如下:

Create Table Province
(
ProID int primary key,
ProName varchar(20) not null
)

Create Table City
(
CityID int primary key,
ProID int foreign key references Province(ProID),
CityName varchar(20)
)

Insert into Province values('1','北京')
Insert into Province values('2','河北')
Insert into Province values('3','山东')

insert into City values('1','1','海淀')
insert into City values('2','1','丰台')
insert into City values('3','1','大兴')
insert into City values('4','2','衡水')
insert into City values('5','2','廊坊')
insert into City values('6','2','保定')
insert into City values('7','3','济南')
insert into City values('8','3','烟台')
insert into City values('9','3','青岛')

通过建表语句我们可以知道,北京下有三个城市--海淀、丰台、大兴,河北下有三个城市--衡水、廊坊、保定,山东有三个城市--济南、烟台、青岛。

然后我们在Web窗体中放好控件,效果如下图所示:
 
dropDownList控件名称分别为ddlProvince、ddlCity

接着我们在Web后台代码中实现功能。我们需要在Web窗体加载时,ddlProvince控件绑定Province表,在ddlProvince下拉选项改变时,ddlCity控件绑定City表。实现代码如下:

建立数据库连接类:
复制代码 代码如下:

public class DB
{
//连接数据库的字符串
public static SqlConnection CreateConnection()
{
SqlConnection con = new SqlConnection("Data Source=. ;Initial Catalog=test;uid=sa;pwd=123456;");
return con;
}
}

Web窗体加载时执行代码:
复制代码 代码如下:

protected void Page_Load(object sender, EventArgs e)
{
//如果窗体是第一次加载
if (!this.IsPostBack)
{
//绑定省份
SqlConnection con = DB.CreateConnection();
//打开数据库连接
con.Open();
SqlCommand cmdProvince = new SqlCommand("select * from Province", con);
SqlDataReader sdrProvince = cmdProvince.ExecuteReader();
//将sdrProvince中的内容绑定到ddlProvince下拉列表中
this.ddlProvince.DataSource = sdrProvince;
//需要显示的数据表Province中的内容
this.ddlProvince.DataTextField = "ProName";
//需要显示的数据表Province中的主键
this.ddlProvince.DataValueField = "ProID";
this.ddlProvince.DataBind();
sdrProvince.Close();
//关闭数据库连接
con.Close();
}
}

ddlProvince控件下拉选项改变时执行的代码:
复制代码 代码如下:

protected void ddlProvince_SelectedIndexChanged(object sender, EventArgs e)
{
SqlConnection con = DB.CreateConnection();
//打开数据库连接
con.Open();
//绑定城市
SqlCommand cmdCity = new SqlCommand("select * from City where ProID=" + this.ddlProvince.SelectedValue, con);
SqlDataReader sdrCity = cmdCity.ExecuteReader();
//将sdrCity中的内容绑定到ddlCity下拉列表中
this.ddlCity.DataSource = sdrCity;
//需要显示的数据表City中的内容
this.ddlCity.DataTextField = "CityName";
//需要显示的数据表City中的主键
this.ddlCity.DataValueField = "CityID";
this.ddlCity.DataBind();
sdrCity.Close();
//关闭数据库连接
con.Close();
}

这样,我们就用DropDownList动态绑定数据表,实现了根据选择的省份动态下拉该省份下的城市的功能,达到了面向对象设计中解耦的目的,增强了代码的可维护性和用户的体验度。

希望我的讲解能对大家有所帮助。
更多精彩内容其他人还在看

asp.net 页面间传值与跳转的区别

通过Server.Transfer("b.aspx") 与Response.Redirect("b.aspx")的区别
收藏 0 赞 0 分享

ASP.NET Gridview与checkbox全选、全不选实现代码

ASP.NET Gridview checkbox全选与全不选实现代码,其实原理就是利用js来实现的,但需要简单的设置下回传。
收藏 0 赞 0 分享

ASP.NET DropDownList控件的使用方法

ASP.NET DropDownList控件的使用方法,学习asp.net的朋友没用过这个控件的朋友可以参考下。
收藏 0 赞 0 分享

一些.NET对多线程异常处理技巧分享

多线程应用,在实际的项目或产品开发中,原则上来说,应该尽量避免,但是在强调用户体验的要求下或开发平台的限制下(如 Silverlight Socket 通讯),我们不得不用多线程。
收藏 0 赞 0 分享

ASP.NET MVC运行出现Uncaught TypeError: Cannot set property __MVC_FormValidation of null的解决方法

同一相站点,有些页面的客户端验证能工作,而有些死活不行。打开页面就出现Uncaught TypeError: Cannot set property __MVC_FormValidation of null错误
收藏 0 赞 0 分享

asp.net 通用分页显示辅助类(改进版)

在使用ASP.NET编程时,如果不用控件的默认分页功能,想自己搞一个,可以看看本文的asp.net通用分页显示辅助类哦。
收藏 0 赞 0 分享

微软 Visual Studio 2010官方下载地址给大家

昨天VS2010在网上报道都已经发布了,现在今天在网上找到Visual Studio 2010官方下载地址,提供给大家下载。
收藏 0 赞 0 分享

Javascript 直接调用服务器C#代码 ASP.NET Ajax实例

近来总有一些朋友会问到一些入门的问题,把这些问题整理一下,写出来。在以前的文章里,曾经利用纯JS编写过Ajax引擎,在真正开发的时候,大家都不喜欢以这种低效率的方式开发,利用MS Ajax的集成的引擎,可以简单不少工作。
收藏 0 赞 0 分享

ASP.NET 页面刷新的实现方法(包括html,js)

ASP.NET 页面刷新的实现方法,比较全了, 包括html与js下的实现方法。
收藏 0 赞 0 分享

asp.net 无刷新翻页就是这么简单

前两天看了一个自定义分页控件,和AspNetPager一样是实现IPostBackEventHandler接口,不过简洁许多,就想能不能实现ICallbackEventHandler接口做到无刷新分页呢?想到了就马上去做,终于,设想变成了现实!!
收藏 0 赞 0 分享
查看更多