三级联动


三级联动
:类似于,快递的地址,某某省,某某区,某某街 (一)首先,用三个conboBox,下拉框,分别对应地,市,区 (二)需要绑定数据库, 访问类代码如下: SqlConnection conn; SqlCommand cmd; public ChinaStatesData() { conn = new SqlConnection("server=.;database=Data0504;user=sa;pwd=123"); cmd = conn.CreateCommand(); } public List<ChinaStates> SelectStates(string Pcode) 写方法 { List<ChinaStates> clist = new List<ChinaStates>(); cmd.CommandText = "select *from ChinaStates where ParentAreaCode = @a"; 防注入攻击 cmd.Parameters.Clear(); cmd.Parameters.Add("@a", Pcode); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { ChinaStates cs = new ChinaStates(); cs.AreaCode = dr["AreaCode"].ToString(); cs.AreaName = dr["AreaName"].ToString(); 注意数据的索引值和类型的转换 cs.ParentAreaCode = dr["ParentAreaCode"].ToString(); clist.Add(cs); } conn.Close(); return clist; } (三)写完方法就回到窗口绑定数据,一个一个的对三个下拉框绑定 因为,市和区的绑定和省的绑定是类似的,所以可以封装成方法,其中的不同点是“0001”改为Pcode,还有comboBox不一样, public void cbDataBind(string pcode, ComboBox cb) { List<ChinaStates> clist1 = new ChinaStatesData().SelectStates(pcode); cb.DataSource = clist1; 然后,从这调取获得 cb.DisplayMember = "AreaName"; cb.ValueMember = "AreaCode"; } (四)然后,绑定省市,应该调取方法 cbDataBind("0001", comboBox1); cbDataBind(comboBox1.SelectedValue.ToString(), comboBox2); cbDataBind(comboBox2.SelectedValue.ToString(), comboBox3); 【databinOK = true;】 (五)然后,应该是选择第一个下拉框,然后其它的两个下拉框也会随着变动,联动开始了 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { cbDataBind(comboBox1.SelectedValue.ToString(), comboBox2); } 然后在第二个下拉框中写,第三个不用写了,因为绑定的是第三个下拉框的内容,同理,第二个一改变第三个就会随着改变 private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { cbDataBind(comboBox2.SelectedValue.ToString(), comboBox3); } (六)但是,这时会出现一个问题就是:省在改变的时候市也在随着改变,可是,区却没有改变,所以,再用中间变量的方法【bool databinOK = false】意思是数据绑没绑完,默认是没有绑完 (七)完成了
原文地址:https://www.cnblogs.com/yunpeng521/p/7215960.html