SQLServer实现简单的省市区联动

database

今天研究了一下SQL Server实现省市区联动的方法,记录一下。

一、先创建三个表,Dic_Area(区)、Dic_City(市)和Dic_Province(省),三个表建表语句如下:

1createtable Dic_Province

2(

3 id intNOTNULL,

4 provinceID varchar(6) defaultNULL,

5 province varchar(40) defaultNULL,

6PRIMARYKEY (id)

7 )

Dic_Province

1createtable Dic_City

2(

3 id intNOTNULL,

4 cityID varchar(6) defaultNULL,

5 city varchar(50) defaultNULL,

6 provinceid varchar(6) defaultNULL,

7PRIMARYKEY (id)

8 )

Dic_City

1CREATETABLE Dic_Area 

2(

3 id intNOTNULL,

4 areaID varchar(50) defaultNULL,

5 area varchar(60) defaultNULL,

6 cityID varchar(6) defaultNULL,

7primarykey(id)

8 )

Dic_Area

插入数据,(数据来源https://www.cnblogs.com/zhu520/p/8244578.html),因为实在是有点懒,只能网上借用一下这位兄台的数据了。插入数据就不说了,复制或者下载过来改一下表名执行就ok。

 

二、新建一个Windows窗体应用,插入3个ComboBox,命名分别为:cbo_Province、cbo_City、cbo_District。

先声明一个连接字符串:

1privatestring connStr = @"Data Source=SD-20191219LHFXSQLEXPRESS;Initial Catalog=AreaSelection;User ID=sa;Password=***********"; //连接字符串

接下来在Form1_Load中添加预加载代码,程序运行的时候ComboBox中就要加载显示地区信息。

1privatevoid Form1_Load(object sender, EventArgs e)

2{

3 LoadingProvice();

4 }

为了代码清晰,我把省市区分别封装成三个方法:LoadingProvice()、LoadingCity()、LoadingDistrict()。

但是在这之前,我们要先构造一个集合,因为cbo_Province可以调用DataSource这个方法。三个表中,每个表都有ID和地区名字,所以新建一个类AreaInfo.cs就可以了:

在AreaInfo中添加下面的代码:

1publicpartialclass AreaInfo

2{

3publicint Id { get; set; } //ID

4publicstring Title { get; set; } //地区名字

5 }

接下来就可以写方法了:(以下分别是省、市、区)

 1privatevoid LoadingProvice()

2{

3 List<AreaInfo> list = new List<AreaInfo>();

4using(SqlConnection conn = new SqlConnection(connStr))

5 {

6string sql = "select * from Dic_Province";

7 SqlCommand cmd = new SqlCommand(sql, conn);

8 conn.Open();

9 SqlDataReader reader = cmd.ExecuteReader();

10

11while (reader.Read())

12 {

13//添加元素

14 list.Add(new AreaInfo()

15 {

16//初始化器

17 Id = Convert.ToInt32(reader["ProvinceID"]),

18 Title = reader["Province"].ToString()

19 });

20 }

21 }

22 cbo_Province.DisplayMember = "Title"; //显示属性

23 cbo_Province.ValueMember = "Id"; //值属性

24 cbo_Province.DataSource = list;

25 }

 1privatevoid LoadingCity()

2{

3int pid = Convert.ToInt32(cbo_Province.SelectedValue);

4 List<AreaInfo> list = new List<AreaInfo>();

5string sql = "select * from Dic_City where provinceid = @pid";

6using(SqlConnection conn = new SqlConnection(connStr))

7 {

8 SqlCommand cmd = new SqlCommand(sql, conn);

9 cmd.Parameters.Add(new SqlParameter("@pid", pid));

10 conn.Open();

11 SqlDataReader reader = cmd.ExecuteReader();

12while(reader.Read())

13 {

14 list.Add(new AreaInfo()

15 {

16 Id = Convert.ToInt32(reader["cityID"]),

17 Title = reader["city"].ToString()

18 });

19 }

20 }

21 cbo_City.DisplayMember = "Title";

22 cbo_City.ValueMember = "Id";

23 cbo_City.DataSource = list;

24 }

 1privatevoid LoadingDistrict()

2{

3 List<AreaInfo> list = new List<AreaInfo>();

4int cid = Convert.ToInt32(cbo_City.SelectedValue);

5string sql = "select * from Dic_Area where cityID = @cid";

6using(SqlConnection conn = new SqlConnection(connStr))

7 {

8 SqlCommand cmd = new SqlCommand(sql, conn);

9 cmd.Parameters.Add(new SqlParameter("@cid", cid));

10 conn.Open();

11 SqlDataReader reader = cmd.ExecuteReader();

12while(reader.Read())

13 {

14 list.Add(new AreaInfo()

15 {

16 Id = Convert.ToInt32(reader["areaID"]),

17 Title = reader["area"].ToString()

18 });

19   }

20 }

21 cbo_District.DisplayMember = "Title";

22 cbo_District.ValueMember = "Id";

23 cbo_District.DataSource = list;

24 }

每个方法大同小异,都是对数据库的基本操作,就没进行过多的注释。

最后在comboBox的SelectedIndexChanged方法中添加方法名,如下:

1privatevoid cbo_provice_SelectedIndexChanged(object sender, EventArgs e)

2{

3 LoadingCity();

4 LoadingDistrict();

5 }

1privatevoid cbo_City_SelectedIndexChanged(object sender, EventArgs e)

2{

3 LoadingDistrict();

4 }

cbo_District控件下面就不需要添加方法了,因为区下面就没有分类了。

完成界面如下:

 

 

 

 

 

 

以上是 SQLServer实现简单的省市区联动 的全部内容, 来源链接: utcz.com/z/534169.html

回到顶部