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