在WinForm通过连接数据库来实现省市级联的效果
首先,在数据库中创建两个表,省份表(Province)和城市表(City),两个表之间需建立外键约束,主键是省份Id,
外键是城市表中的省份Id,从而建立起省份和城市之间的从属关系。
示例代码:(SQL Server 2005)
--省份表
if exists (select * from sysobjects where name = 'prov')
drop table prov
go
create table prov
(
pid int identity(1,1) not null primary key, --省份编号
pName nvarchar(20) not null, --省份名称
)
go
--城市表
if exists (select * from sysobjects where name = 'city')
drop table city
go
create table city
(
cid int identity(1,1) not null primary key,
pid int references prov(pid),
cName nvarchar(20) not null
)
go
然后,创建WinForm项目,在窗体中添加两个下拉列表框,一个显示省份,另一个显示城市;
之后,创建数据库连接,进行业务逻辑处理,在窗体的加载事件中来实现省份下拉列表框显示省份的效果;
首先声明一个DataSet用来接收数据集合,然后,将该DataSet对象的值赋给省份下拉列表框的DataSoruce
属性;再设置一下省份下拉列表框的DispalyMember属性,用来指定下拉列表框中显示数据表中哪个字段
示例代码:
private void Form1_Load(object sender, EventArgs e)
{
DataSet provDS = new DataSet();
provDS = provManager.GetProv();
//为省份列表设置数据源
this.cboPro.DataSource = provDS.Tables[0];
//设置显示字段
this.cboPro.DisplayMember = "pName";
}
之后,在省份下拉列表框的"SelectedIndexChanged"事件中编写代码,用来显示对应的城市列表框的内容。
首先,绑定省份列表中的省份Id,涉及到下拉列表框的ValueMember属性;然后利用下拉列表框的
SelectedValue属性获得该省份Id;再根据获取的省Id为城市列表设置数据源,最后设置城市列表的显示
字段。
示例代码:
private void cboPro_SelectedIndexChanged(object sender, EventArgs e)
{
//绑定pid
this.cboPro.ValueMember = "pid";
//获得pid
int pid = Convert.ToInt32(this.cboPro.SelectedValue);
//为城市列表设置数据源
this.cboCity.DataSource = cityManager.GetCity(pid).Tables[0];
//设置显示字段
this.cboCity.DisplayMember = "cName";
}
总结,在WinForm中实现省市级联效果,实际上就是利用了下拉列表框的4个属性来实现的。
DataSource属性用来指定数据源;
DisplayMember属性用来设置显示下拉列表框显示哪个数据库中的字段;
ValueMember属性用来绑定主键;
SelectedValue属性用来获取选中项的Id值,该Id一般都是一个主键,可用该Id值来设置另一个下拉列表框的显
示,从而实现数据显示的联动效果。