今天本人遇到一个很怪的现象:
 
我做的是一个winform窗体,里面有两个comboBox控件comboBox1和comboBox2,我要实现的功能是comboBox1绑定省的名称,comboBox2根据comboBox1选择的省的名称来显示对应的城市。我的做法如下:
首先窗体加载的时候,从数据库中获得省份的数据表dt,然后绑定到comboBox1,然后根据comboBox1选择的省名从数据库获取城市的DataTable,绑定到comboBox2,
紧接着给comboBox1触发SelectedIndexChanged事件,在事件里写入获取绑定comboBox2数据源的方法。但结果是:程序出错,调试了一下,发现comboBox1绑定时,也就是执行comboBox1.DataSource = dt时,程序会自动跳到comboBox1_SelectedIndexChanged事件,执行完这个事件后再执行 this.cb_dep_comboBox1.DisplayMember = "Pro_name";this.comboBox1.ValueMember = "Pro_id";相关代码如下:
public void depInfo() 
        {
            Emp emp = new Emp();
            DataTable dt = emp.getDep();  //获取省名的DataTable            
            this.comboBox1.DataSource = dt;              this.comboBox1.DisplayMember = "Pro_name";
            this.comboBox1.ValueMember = "Pro_id";          
        }
        public void empInfo() 
        {
            Emp emp = new Emp();
            DataTable dt = emp.getEmp(this.comboBox1.SelectedValue.ToString().Trim());  //获取省对应城市名的DataTable            
            this.comboBox2.DataSource = dt;
            this.comboBox2.DisplayMember = "city_name";
            this.comboBox2.ValueMember = "city_id";
        }  private void Form1_Load(object sender, EventArgs e)
        {
            depInfo();
            empInfo(); 
        }        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            empInfo(); 
        }
 可这是为什么会出现偶说的那种情况呢 ?
真是百思不得其解啊 ,希望各位给偶一些意见或分析下原因,不胜感激啊!!!

解决方案 »

  1.   

    comboBox1_SelectedIndexChanged里增加(if combobox1.selectedIndex<0)return;
      

  2.   

    非常感谢 showyoumymercy ,问题我知道怎么解决,可这是什么原因引起的呢?
    combobox1数据绑定的时候怎么会触发comboBox1_SelectedIndexChanged事件呢?
      

  3.   

    combobox1绑定数据时已经发生了改变即
    comboBox1没赋值时第一项时null
    绑定后第一项就有了值,所以触发comboBox1_SelectedIndexChanged
      

  4.   

    当下拉框绑定数据源以后,它的SelectedIndex就会发生变化,自然会触发SelectedIndexChange事件。当然,具体变成多少我不记得了。但是,不论是用鼠标选择了某一项,还是在代码里面给SelecedIndex赋一个值都会触发SelectedIndexChange事件。
      

  5.   

    编程是一种艺术,我在欣赏这种艺术,却无法表演,但我也是一路走来的 ASP.NET技术群(70150839),欢迎你的到来!
      

  6.   

    public void depInfo() 
            { 
                Emp emp = new Emp(); 
                DataTable dt = emp.getDep();  //获取省名的DataTable            
                this.comboBox1.DataSource = dt;              this.comboBox1.DisplayMember = "Pro_name"; 
                this.comboBox1.ValueMember = "Pro_id";
                this.comboBox1.SelectIndex=-1;//加上这句试试!          
            } 或者删除ComboBox的SelectedIndexChanged事件,在绑定之后手工注册SelectedIndexChanged事件。