Combobox 下拉框显示地区信息


使用下拉框控件(combobox)显示 省,市,县

  • 导入数据表

链接: https://pan.baidu.com/s/1QCzRMfUc-iv4EYYIAwtJbQ?pwd=p3n7 提取码: p3n7 复制这段内容后打开百度网盘手机App,操作更方便哦

  • 需求:

    • 通过 combobox 显示信息,选中省的时,市和县 显示相应数据
  • 思路:

    • 通过 AreaCode 找到 父节点(ParentCode )= AreaCode 等级为 2,3 的数据
  • 遇到的问题:

    • 使用 Combobox的SelectedIndexChanged()事件时,在初始化窗体时 事件会自动执行一次,但因为还没完成初始化所以 cmbCity.SelectedValue 为空;区 显示一直查询不出来
    • 解决:使用 SelectionChangeCommitted() 事件
    • 参考: SelectedIndexChanged事件_ruiqi317的专栏-CSDN博客_selectedindexchanged
  • 用了工具类SqlHelper

  • combobox 的几个属性(重点)

    • DisplayMember 展示的信息
    • ValueMember 值
    • SelectedValue 获取选中的值;
  • 最终效果:

  • 上代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Common;

namespace regionZhanshi1230A
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            initAddData();
            
        }

        /// 
        /// 显示 省 下拉框中的信息
        /// 
        public void showProindce()
        {
            cmbProvince.DataSource = SqlHelper.ExecuteDataTable("select * from dbo.SysArea where Level = 1");

            //要显示在下拉框中的内容
            // 文本框内容
            cmbProvince.DisplayMember = "AreaName";
            // 当前区域编号信息
            cmbProvince.ValueMember = "AreaCode";
        }

        //初始化加载信息
        public void initAddData()
        {
            showProindce();
            inCodeByRegion(cmbProvince.SelectedValue.ToString());
            inCodeByCounty(cmbCity.SelectedValue.ToString());
        }


        /// 
        /// 通过 省的编号,该省所辖区的信息
        /// 
        /// 
        private void inCodeByRegion(String code)
        {
            if (code != "")
            {
                int areaCode = Convert.ToInt32(code);
                string sql = "select * from dbo.SysArea where Level = 2 and ParentCode =  @areaCode";
                SqlParameter parameter = new SqlParameter("@areaCode", areaCode);
                cmbCity.DataSource = SqlHelper.ExecuteDataTable(sql, parameter);
                cmbCity.DisplayMember = "AreaName";
                cmbCity.ValueMember = "AreaCode";
            }
        }

        /// 
        /// 通过编号 找到 区下面素有县
        /// 
        /// 
        private void inCodeByCounty(String code)
        {
            if (code != "")
            {
                int areaCode = Convert.ToInt32(code);
                string sql = "select * from dbo.SysArea where Level = 3 and ParentCode =  @areaCode";
                SqlParameter parameter = new SqlParameter("@areaCode", areaCode);
                cmbCounty.DataSource = SqlHelper.ExecuteDataTable(sql, parameter);
                cmbCounty.DisplayMember = "AreaName";
                cmbCounty.ValueMember = "AreaCode";
            }
        }

        //选择省时 区和县 也跟着修改
        private void cmbProvince_SelectionChangeCommitted(object sender, EventArgs e)
        {
            inCodeByRegion(cmbProvince.SelectedValue.ToString());
            inCodeByCounty(cmbCity.SelectedValue.ToString());
        }

        // 选择区时 县 跟着修改
        private void cmbCity_SelectionChangeCommitted(object sender, EventArgs e)
        {
            inCodeByCounty(cmbCity.SelectedValue.ToString());
        }

       

    }
}