使用下拉框控件(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();
}
/// <summary>
/// 显示 省 下拉框中的信息
/// </summary>
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());
}
/// <summary>
/// 通过 省的编号,该省所辖区的信息
/// </summary>
/// <param name="code"></param>
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";
}
}
/// <summary>
/// 通过编号 找到 区下面素有县
/// </summary>
/// <param name="code"></param>
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());
}
}
}