实现省市下拉菜单


使用DropDown可以很容易实现下拉菜单,关键是找到一份全国各省市数据,这里提供了一份数据,但是数据较老。数据见文末连接。

1.原始数据

从网络找到一份省市对应表,到县级市一级(比较老),txt格式,如下图:
在这里插入图片描述

2.读取数并整理

2.1 分别定义城市类和省类

public class Province
{
    public string provinceName;
    public List<City> cities;

    public Province(string provinceName)
    {
        this.provinceName = provinceName;
        cities = new List<City>();
    }
}

public class City
{
    public string cityName;
    public List<string> subCities;

    public City(string cityName)
    {
        this.cityName = cityName;
        subCities = new List<string>();
    }
}

2.2 读取信息并分类

private List<Province> provinces;

    void ReadFile()
    {
        string file = @"D:\cityInfo.txt";

        using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
        {
            StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
            string info = sr.ReadLine();

            while (info != null)
            {              
                string[] infoSplit = info.Split('\t');

                InsetItem(infoSplit);
                //string newStr = i+":"+ infoSplit[0] + "-" + infoSplit[1] + "-" + infoSplit[2];
                //Debug.Log(newStr);
                info = sr.ReadLine();
            }

            sr.Dispose();
            sr.Close();

            fs.Dispose();
            fs.Close();
        }
    }

    void InsetItem(string[] item)
    {
        Province province = CatchProvince(item[0]);

        if(province==null)
        {
            province = new global::Province(item[0]);
            provinces.Add(province);
        }

        City city = CatchCity(province, item[1]);

        if(city==null)
        {
            city = new global::City(item[1]);
            province.cities.Add(city);
        }
        city.subCities.Add(item[2]);
    }

    Province CatchProvince(string provinceName)
    {
        Province province = null;

        //bool isFound = false;

        foreach(var p in provinces)
        {
            if(p.provinceName == provinceName)
            {
                province = p;
                //isFound = true;
                break;
            }
        }

        return province;
    }

    City CatchCity(Province province,string cityName)
    {
        City city = null;

        foreach(var c in province.cities)
        {
            if(c.cityName == cityName)
            {
                city = c;
                break;
            }
        }

        return city;
    }

获取省市

    public List<Province> GetProvices()
    {
        return provinces;
    }

    public List<City> GetCities(int index)
    {
        if (index >= provinces.Count) return null;

        return provinces[index].cities;
    }

2.3 输出省市信息以备用

void OutputInfoXml()
    {
        XmlDocument cityXml = new XmlDocument();
        XmlDeclaration xmlDeclaration = cityXml.CreateXmlDeclaration("1.0", "gb2312", "");
        cityXml.AppendChild(xmlDeclaration);

        XmlElement xmlElem = cityXml.CreateElement("Menu");
        cityXml.AppendChild(xmlElem);

        for(int i=0;i<provinces.Count;i++)
        {
            XmlElement provinceElem = cityXml.CreateElement("Province");
            provinceElem.SetAttribute("Name", provinces[i].provinceName);
            xmlElem.AppendChild(provinceElem);

            for(int j=0;j<provinces[i].cities.Count;j++)
            {
                XmlElement cityElem = cityXml.CreateElement("City");
                cityElem.SetAttribute("Name", provinces[i].cities[j].cityName);
                provinceElem.AppendChild(cityElem);

                for(int k=0;k<provinces[i].cities[j].subCities.Count;k++)
                {
                    XmlElement subcityElem = cityXml.CreateElement("Subcity");
                    subcityElem.SetAttribute("Name", provinces[i].cities[j].subCities[k]);
                    cityElem.AppendChild(subcityElem);
                }
            }
        }

        cityXml.Save(exportFile);
    }

3.数据链接

txt以及xml地址:

https://files.cnblogs.com/files/llstart-new0201/%E4%B8%AD%E5%9B%BD%E5%9F%8E%E5%B8%82%E4%BF%A1%E6%81%AF.zip

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值