1 private void Form1_Load(object sender, EventArgs e) 2 { 3 //form Load事件时加载第一个combo 即省份的combo 4 //null代表它没有父级combo, 0代表数据库中他的父级省份为0,即不存在 5 LoadCombo(null, 0); 6 } 7 //combo中下拉菜单值发生变化触发的事件 8 private void ComBox_SelectedValueChanged(object sender, EventArgs e) 9 { 10 ComboBox a = (ComboBox)sender;//将触发此事件的对象转换为combo类型 11 for (int i = 0; i < this.Controls.Count; i++)//for循环遍历form所有控件 12 { 13 if (this.Controls[i] is ComboBox)//判断是否为combobox类型 14 { 15 ComboBox item = (ComboBox)this.Controls[i];//转换为combobox对象 16 if (item.Location.Y > a.Location.Y)//判断触发此事件的combo下是否有combo 17 { 18 this.Controls.Remove(item);//如果有从form中删除此combo 19 i = i - 1;//删除后form的控件个数少了一个,因此计数器也要减一 20 } 21 } 22 } 23 TblArea tbla = a.SelectedItem as TblArea;//将选中的item转换为TblArea对象 24 LoadCombo(sender, tbla.AreaId);//继续调用LoadCombo方法 25 } 26 private void LoadCombo(object sender, int num) 27 { 28 string sql = "select * from TblArea where AreaPId = @num";//sql语句 29 //用SqlHelper类调用sql语句并返回 结果 30 SqlDataReader reader = SqlHelper.ExecuteReader(sql, new SqlParameter("@num", num)); 31 if (reader.HasRows) 32 { 33 ComboBox cmb = new ComboBox(); 34 if (sender != null)//sender不为空说明此时form已经有了至少一个combo 35 { 36 ComboBox a = (ComboBox)sender; 37 cmb.Location = new System.Drawing.Point(10, a.Location.Y + 30); 38 } 39 else//form中还没有combo,规定其位置 40 { 41 cmb.Location = new System.Drawing.Point(10, 10); 42 } 43 while (reader.Read())//读取数据 44 { 45 TblArea area = new TblArea(); 46 area.AreaId = Convert.ToInt32(reader["AreaId"]); 47 area.AreaName = reader["AreaName"].ToString(); 48 cmb.Items.Add(area); 49 } 50 //设定combo的格式 , Display 和Value的 对应数据源 51 cmb.DropDownStyle = ComboBoxStyle.DropDownList; 52 cmb.DisplayMember = "AreaName"; 53 cmb.ValueMember = "AreaId"; 54 //给每个combo添加一个事件 55 cmb.SelectedValueChanged += new System.EventHandler(ComBox_SelectedValueChanged); 56 this.Controls.Add(cmb); 57 } 58 }
递归实现省市级联,动态生成并删除combo,布布扣,bubuko.com
原文:http://www.cnblogs.com/tooyoung/p/3581012.html