省市县联动

 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
    }
}

猜你喜欢

转载自www.cnblogs.com/palebluestarrysky/p/10816777.html