在WinForm中实现省市级联的效果

在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值来设置另一个下拉列表框的显

示,从而实现数据显示的联动效果。

posted @ 2011-09-23 20:47  星月磊子  阅读(386)  评论(0编辑  收藏  举报