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中不能清空
解决方法:暂时还没找到。
因为是项目中遇到了问题,才做此试验的,后期有机会,将前期遇到的问题进行进一步的整理