省市县联动

 1 //Program.cs
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Threading.Tasks;
 6 using System.Windows.Forms;
 7 
 8 namespace ComboxExc02
 9 {
10     static class Program
11     {
12         /// <summary>
13         /// 应用程序的主入口点。
14         /// </summary>
15         [STAThread]
16         static void Main()
17         {
18             Application.EnableVisualStyles();
19             Application.SetCompatibleTextRenderingDefault(false);
20             Application.Run(new Form1());
21         }
22     }
23 }
//Province.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ComboxExc02
{
    public class Province
    {
        private string ProvinceName;
        /// <summary>
        /// 区/县名称
        /// </summary>
        public string provinceName
        {
            get { return ProvinceName; }
            set { ProvinceName = value; }
        }

        public City[] Cities;
    }
}
//City.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ComboxExc02
{
    public class City
    {
        private string CityName;
        /// <summary>
        /// 区/县名称
        /// </summary>
        public string cityName
        {
            get { return CityName; }
            set { CityName = value; }
        }

        public District[] Districts;
    }
}
//District.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ComboxExc02
{
    public class District
    {
        private string DistName;
        /// <summary>
        /// 区/县名称
        /// </summary>
        public string distName
        {
            get { return DistName; }
            set { DistName = value; }
        }

    }
}
//Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace ComboxExc02
{
    public partial class Form1 : Form
    {
        public string FilePath = System.Environment.CurrentDirectory.ToString()+@"\CbxData.txt";
        string strData = string.Empty;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //读取所有文件中的文本数据
            strData = this.ReadFile(FilePath);

            //从文件数据读取省份信息并绑定控件
            List<Province> provinces = this.GetProvinceData(strData);
            this.cbxProvince.DataSource = provinces;
            this.cbxProvince.DisplayMember = "provinceName";
            //this.cbxProvince.SelectedIndex = 0;
            //cbxProvince_SelectedIndexChanged(sender, e);
        }

        #region 读取指定文件中的所有文本文字
        /// <summary>
        /// 读取指定文件中的所有文本文字
        /// </summary>
        /// <param name="filePath">文件路径</param>
        /// <returns>文件中所有的文本数据</returns>
        private string ReadFile(string filePath)
        {
            string strAllData = string.Empty;
            string[] strsAllData = File.ReadAllLines(filePath, Encoding.GetEncoding("gb2312"));//gb2312是读取为汉字格式
            foreach (string strData in strsAllData)
            {
                strAllData += strData.Trim();
            }
            return strAllData;
        }
        #endregion

        #region 由读取的文本数据解析出省份数据
        /// <summary>
        /// 由读取的文本数据解析出省份数据
        /// </summary>
        /// <param name="strAllData">已读取的文本数据</param>
        /// <returns>省份数据集合</returns>
        private List<Province> GetProvinceData(string strAllData)
        {
            List<Province> provinceList = new List<Province>();
            string[] strProvinces = strAllData.Split(';');
            foreach (string strProvince in strProvinces)
            {
                Province province = new Province();
                province.provinceName = strProvince.Split('|')[0];
                provinceList.Add(province);
            }
            return provinceList;
        }
        #endregion

        #region 根据省份数据查找出下属城市数据
        /// <summary>
        /// 根据省份数据查找出下属城市数据
        /// </summary>
        /// <param name="strAllData">已读取的文本数据</param>
        /// <returns>指定的省份带城市数据</returns>
        private Province GetCityDataByProvince(string strAllData,Province provinceData)
        {
            Province province = new Province();
            string[] strProvinces = strAllData.Split(';');
            foreach (string strProvince in strProvinces)
            {
                if(provinceData.provinceName == strProvince.Split('|')[0])
                {
                    province.provinceName = provinceData.provinceName;
                    string[] strCities = strProvince.Split('|')[1].ToString().Split('/');
                    List<City> cities = new List<City>();
                    foreach (string strCity in strCities)
                    {
                        City city = new City();
                        city.cityName = strCity.Split(':')[0];
                        cities.Add(city);
                    }
                    province.Cities = cities.ToArray();
                    break;
                }
            }
            return province;
        }
        #endregion

        #region 根据一个省份一个城市数据查找出下属地区数据
        /// <summary>
        /// 根据一个省份一个城市数据查找出下属地区数据
        /// </summary>
        /// <param name="strAllData">已读取的文本数据</param>
        /// <param name="provinceData">一个省份一个城市数据</param>
        /// <returns>指定的省份和城市带地区数据</returns>
        private Province GetDistrictDataByCityofProvince(string strAllData, Province provinceData)
        {
            Province province = new Province();
            string[] strProvinces = strAllData.Split(';');
            foreach (string strProvince in strProvinces)
            {
                if (provinceData.provinceName == strProvince.Split('|')[0])
                {
                    province.provinceName = provinceData.provinceName;
                    string[] strCities = strProvince.Split('|')[1].ToString().Split('/');
                    foreach (string strCity in strCities)
                    {
                        if (strCity.Split(':')[0]==provinceData.Cities[0].cityName)
                        {
                            province.Cities = new City[1];
                            province.Cities[0] = provinceData.Cities[0];
                            List<District> districts = new List<District>();
                            string[] strDistricts= strCity.Split(':')[1].ToString().Split(',');
                            foreach(string strDistrict in strDistricts)
                            {
                                District district = new District();
                                district.distName = strDistrict;
                                districts.Add(district);
                            }
                            province.Cities[0].Districts = districts.ToArray();
                            break;
                        }
                    }
                }
            }
            return province;
        }
        #endregion

        #region 选定省份后,显示对应城市数据
        private void cbxProvince_SelectedIndexChanged(object sender, EventArgs e)
        {
            Province province = new Province();
            province.provinceName = ((Province)this.cbxProvince.SelectedValue).provinceName.ToString();

            //获取所有指定省份的城市数据并绑定到控件
            province = this.GetCityDataByProvince(strData, province);
            this.cbxCity.DataSource = province.Cities;
            this.cbxCity.DisplayMember = "cityName";
        }
        #endregion

        #region 选定省份和城市后,绑定显示下属的区县数据
        private void cbxCity_SelectedIndexChanged(object sender, EventArgs e)
        {
            Province province = new Province();
            province.provinceName = ((Province)this.cbxProvince.SelectedValue).provinceName.ToString();
            City city = new City();
            city.cityName = ((City)this.cbxCity.SelectedValue).cityName.ToString();
            province.Cities = new City[1];
            province.Cities[0] = city;

            //获取所有指定省份和城市后,查询下属区县数据并绑定到控件
            province = this.GetDistrictDataByCityofProvince(strData, province);
            this.cbxArea.DataSource = province.Cities[0].Districts;
            this.cbxArea.DisplayMember = "distName";
        }
        #endregion
    }
}

 

转载于:https://www.cnblogs.com/palebluestarrysky/p/10816777.html

之前从网上找的三级联动都太老了,数据也都是很久之前的数据,所以自己把从国家统计局扒下来的省市三级联动数据做了整理,目前最新的三级联动,童叟无欺。大家看北京市和天津市的几个分区就知道是最新的了。 INSERT INTO `address` VALUES (1, '110000', 0, '北京市', 1); INSERT INTO `address` VALUES (2, '110100', 110000, '市辖区', 2); INSERT INTO `address` VALUES (3, '110101', 110100, '东城区', 3); INSERT INTO `address` VALUES (4, '110102', 110100, '西城区', 3); INSERT INTO `address` VALUES (5, '110105', 110100, '朝阳区', 3); INSERT INTO `address` VALUES (6, '110106', 110100, '丰台区', 3); INSERT INTO `address` VALUES (7, '110107', 110100, '石景山区', 3); INSERT INTO `address` VALUES (8, '110108', 110100, '海淀区', 3); INSERT INTO `address` VALUES (9, '110109', 110100, '门头沟区', 3); INSERT INTO `address` VALUES (10, '110111', 110100, '房山区', 3); INSERT INTO `address` VALUES (11, '110112', 110100, '通州区', 3); INSERT INTO `address` VALUES (12, '110113', 110100, '顺义区', 3); INSERT INTO `address` VALUES (13, '110114', 110100, '昌平区', 3); INSERT INTO `address` VALUES (14, '110115', 110100, '大兴区', 3); INSERT INTO `address` VALUES (15, '110116', 110100, '怀柔区', 3); INSERT INTO `address` VALUES (16, '110117', 110100, '平谷区', 3); INSERT INTO `address` VALUES (17, '110118', 110100, '密云区', 3); INSERT INTO `address` VALUES (18, '110119', 110100, '延庆区', 3); INSERT INTO `address` VALUES (19, '120000', 0, '天津市', 1); INSERT INTO `address` VALUES (20, '120100', 120000, '市辖区', 2); INSERT INTO `address` VALUES (21, '120101', 120100, '和平区', 3); INSERT INTO `address` VALUES (22, '120102', 120100, '河东区', 3); INSERT INTO `address` VALUES (23, '120103', 120100, '河西区', 3); INSERT INTO `address` VALUES (24, '120104', 120100, '南开区', 3); INSERT INTO `address` VALUES (25, '120105', 120100, '河北区', 3); INSERT INTO `address` VALUES (26, '120106', 120100, '红桥区', 3); INSERT INTO `address` VALUES (27, '120110', 120100, '东丽区', 3); INSERT INTO `address` VALUES (28, '120111', 120100, '西青区', 3); INSERT INTO `address` VALUES (29, '120112', 120100, '津南区', 3); INSERT INTO `address` VALUES (30, '120113', 120100, '北辰区', 3); INSERT INTO `address` VALUES (31, '120114', 120100, '武清区', 3); INSERT INTO `address` VALUES (32, '120115', 120100, '宝坻区', 3); INSERT INTO `address` VALUES (33, '120116', 120100, '滨海新区', 3); INSERT INTO `address` VALUES (34, '120117', 120100, '宁河区', 3); INSERT INTO `address` VALUES (35, '120118', 120100, '静海区', 3); INSERT INTO `address` VALUES (36, '120119', 120100, '蓟州区', 3);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值