SQLServer 實現簡單的省市區聯動

来源:https://www.cnblogs.com/i-llusion/archive/2020/06/16/13141808.html
-Advertisement-
Play Games

今天研究了一下SQL Server實現省市區聯動的方法,記錄一下。 一、先創建三個表,Dic_Area(區)、Dic_City(市)和Dic_Province(省),三個表建表語句如下: 1 create table Dic_Province 2 ( 3 id int NOT NULL, 4 pro ...


今天研究了一下SQL Server實現省市區聯動的方法,記錄一下。

一、先創建三個表,Dic_Area(區)、Dic_City(市)和Dic_Province(省),三個表建表語句如下:

1 create table Dic_Province
2 (
3   id int NOT NULL,
4   provinceID varchar(6) default NULL,
5   province varchar(40) default NULL,
6   PRIMARY KEY  (id)
7 )
Dic_Province
1 create table Dic_City
2 (
3   id int NOT NULL,
4   cityID varchar(6) default NULL,
5   city varchar(50) default NULL,
6   provinceid varchar(6) default NULL,
7   PRIMARY KEY  (id)  
8 )
Dic_City
1 CREATE TABLE Dic_Area 
2 (
3   id int NOT NULL,
4   areaID varchar(50) default NULL,
5   area varchar(60) default NULL,
6   cityID varchar(6) default NULL,
7   primary key(id)
8 )
Dic_Area

插入數據,(數據來源https://www.cnblogs.com/zhu520/p/8244578.html),因為實在是有點懶,只能網上借用一下這位兄臺的數據了。插入數據就不說了,複製或者下載過來改一下表名執行就ok。

 

二、新建一個Windows窗體應用,插入3個ComboBox,命名分別為:cbo_Province、cbo_City、cbo_District。

先聲明一個連接字元串:

1 private string connStr = @"Data Source=SD-20191219LHFX\SQLEXPRESS;Initial Catalog=AreaSelection;User ID=sa;Password=***********"; //連接字元串

接下來在Form1_Load中添加預載入代碼,程式運行的時候ComboBox中就要載入顯示地區信息。

1 private void Form1_Load(object sender, EventArgs e)
2 {
3      LoadingProvice();
4 }

為了代碼清晰,我把省市區分別封裝成三個方法:LoadingProvice()、LoadingCity()、LoadingDistrict()。

但是在這之前,我們要先構造一個集合,因為cbo_Province可以調用DataSource這個方法。三個表中,每個表都有ID和地區名字,所以新建一個類AreaInfo.cs就可以了:

在AreaInfo中添加下麵的代碼:

1 public partial class AreaInfo
2 {
3     public int Id { get; set; } //ID
4     public string Title { get; set; } //地區名字
5 }

接下來就可以寫方法了:(以下分別是省、市、區)

 1 private void LoadingProvice()
 2 {
 3     List<AreaInfo> list = new List<AreaInfo>();
 4     using(SqlConnection conn = new SqlConnection(connStr))
 5     {
 6          string sql = "select * from Dic_Province";
 7          SqlCommand cmd = new SqlCommand(sql, conn);
 8          conn.Open();
 9          SqlDataReader reader = cmd.ExecuteReader();
10 
11          while (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 }
 1 private void LoadingCity()
 2 {
 3      int pid = Convert.ToInt32(cbo_Province.SelectedValue);
 4      List<AreaInfo> list = new List<AreaInfo>();
 5      string sql = "select * from Dic_City where provinceid = @pid";
 6      using(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();
12           while(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 }
 1 private void LoadingDistrict()
 2 {
 3      List<AreaInfo> list = new List<AreaInfo>();
 4      int cid = Convert.ToInt32(cbo_City.SelectedValue);
 5      string sql = "select * from Dic_Area where cityID = @cid";
 6      using(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();
12           while(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方法中添加方法名,如下:

1 private void cbo_provice_SelectedIndexChanged(object sender, EventArgs e)
2 {
3       LoadingCity();
4       LoadingDistrict();
5 }
1 private void cbo_City_SelectedIndexChanged(object sender, EventArgs e)
2 {
3       LoadingDistrict();
4 }

cbo_District控制項下麵就不需要添加方法了,因為區下麵就沒有分類了。

完成界面如下:

 

 

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Kubernetes全系列總結如下,後期不定期更新。歡迎基於學習、交流目的的轉載和分享,禁止任何商業盜用,同時希望能帶上原文出處,尊重ITer的成果,也是尊重知識。若發現任何錯誤或紕漏,留言反饋或右側添加本人反饋。 正篇 001.Kubernetes簡介 002.Kubernetes簡單入門實例 0 ...
  • 更多精彩文章請關註公眾號『大海的BLOG』 上一篇文章給大家講述了重裝系統後的驅動問題,那麼接下來的內容是給大家推薦一些增快辦公效率的軟體。 在配置好顯卡驅動後,可以說一個嶄新的生產力就躍然眼前了,那麼接下來我們需要做什麼呢? 更新系統 Tips:剛展開完畢的系統還在後臺下載更新微軟自己的軟體,所以 ...
  • SRAM是控制器電路中重要的元器件,控制器硬體出廠時,要對所有元器件進行檢測。對SRAM某個地址讀寫,可以判斷SRAM晶元是否損壞,以及數據線是否虛焊。 為解決現有技術中不能對SRAM晶元地址引腳線短路故障進行快速精確檢測定位的問題;提供一種SRAM晶元地址引腳線短路檢測方法,包括以下步驟: 一、根 ...
  • kubeadm介紹 kubeadm概述 參考《附003.Kubeadm部署Kubernetes》。 kubeadm功能 參考《附003.Kubeadm部署Kubernetes》。 本方案描述 本方案採用kubeadm部署Kubernetes 1.18.3版本; etcd採用混部方式; KeepAli ...
  • 環境:Ubuntu 16.04 研究原因:https://www.cnblogs.com/sjsea/p/13126996.html 1.SCP # 上傳 scp /home/sea/Desktop/test.sh [email protected]:/home/sea/Desktop/test.sh ...
  • 摘要:Kafka中的位移是個極其重要的概念,因為數據一致性、準確性是一個很重要的語義,我們都不希望消息重覆消費或者丟失。而位移就是控制消費進度的大佬。本文就詳細聊聊kafka消費位移的那些事,包括: 概念剖析 kafka的兩種位移 關於位移(Offset),其實在kafka的世界里有兩種位移: 分區 ...
  • Mysql 密碼修改 linux 忘記密碼 新建用戶 更新密碼 ...
  • Mysql 密碼修改 win10 忘記密碼 新建用戶 更新密碼 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...