• 选择页面风格:
  • C#Winform ComboBox 省市县三级联动

    作者:追梦 更新时间:2018-07-15 13:53:52 来源:原创 【字号: 】 浏览
    [导读]C#Winform ComboBox 省市县三级联动

    C#Winform ComboBox 省市县三级联动查询

    数据库信息:http://www.feilongnet.com/Article/Article.asp?nid=39


    【界面截图后补】


    一、字段属性定义

    ///

    /// 1、区域属性定义

    ///

    public class ChinaArea

    {

        public string codeID { get; set; }

        public string name { get; set; }

        public string parentID { get; set; }

    }



    二、查询方法

    ///

    /// 2、查询方法 参数为parentID

    ///

    public class ChinaAreaData

    {

        SqlConnection conn = null;

        SqlCommand cmd = null;

        public ChinaAreaData()

        {

              conn = new SqlConnection("Data Source=.;Initial Catalog=master;Integrated Security=SSPI;");

              cmd = conn.CreateCommand();

        }

         //查询方法 参数为父级代码

        public List

        {

           cmd.CommandText = "select * from Area where parentId=@parentId";

          cmd.Parameters.Clear();

            cmd.Parameters.AddWithValue("@parentId", pCode);

           conn.Open();

           SqlDataReader dr= cmd.ExecuteReader();【处于网站安全问题,如使用源码,请将最后一个全角换成半角】

            if (dr.HasRows)

               {

                    while (dr.Read())

                     {

                         ChinaArea area = new ChinaArea();

                         area.codeID = dr["codeID"].ToString();

                         area.name = dr["name"].ToString();

                         area.parentID = dr["parentID"].ToString();

                         areas.Add(area);

                     }

               }

               conn.Close();

               return areas;

        }

    }

    三、窗体加载,初始化各个下拉框的数据

    项目中出现的问题原因之一:窗体加载时只加载第一个ComboBox中的数据,所以导致窗体加载时,其他ComboBox报错。

    解决方法是:每个ComboBox都需要在窗体载入的时候进行初始化

    private void Form1_Load(object sender, EventArgs e)

    {

        //3 窗体加载时,自动读取数据库中的数据

        //3-1 绑定省 parentID=0

        cobProvince.DataSource = new ChinaAreaData().Select("0");

        cobProvince.DisplayMember = "name";

        cobProvince.ValueMember = "codeID";

        //3-2 绑定市

        cobCity.DataSource = new ChinaAreaData().Select(cobProvince.SelectedValue.ToString());

        cobCity.DisplayMember = "name";

        cobCity.ValueMember = "codeID";

        //3-3 绑定县

        cobCounty.DataSource = new ChinaAreaData().Select(cobCity.SelectedValue.ToString());

        cobCounty.DisplayMember = "name";

        cobCounty.ValueMember = "codeID";

    }


    四、各个下拉框下拉改变事件

    项目中出现的问题原因之二:将_SelectedIndexChanged中的代码进行了封装,导致部分选择会出现空引用的问题

    解决方法:多写几行代码,每个事件中都写一遍。

    疑问:为什么不能将代码进行封装调用?

    //4 省选项发生更改时的事件

    private void cobProvince_SelectedIndexChanged(object sender, EventArgs e)

    {

        cobCity.DataSource = new ChinaAreaData().Select(cobProvince.SelectedValue.ToString());

        cobCity.DisplayMember = "name";

        cobCity.ValueMember = "codeID";

    }


    //5 市选项发生更改时的事件

    private void cobCity_SelectedIndexChanged(object sender, EventArgs e)

    {

        cobCounty.DataSource = new ChinaAreaData().Select(cobProvince.SelectedValue.ToString());

        cobCounty.DisplayMember = "name";

        cobCounty.ValueMember = "codeID";

    }


    项目中出现的问题原因之三:如果只有二级,选择该项时,三级ComboBox中不能清空

    解决方法:暂时还没找到。


    因为是项目中遇到了问题,才做此试验的,后期有机会,将前期遇到的问题进行进一步的整理


    {$FL_ggad250}
    栏目导航