private void deptcomboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            using (SqlConnection cn = new SqlConnection(mysettings.Localsql))
            {
                cn.Open();
                string query = "select tuser.userid,tuser.username from tuser where tuser.deptid = " + int.Parse(deptcomboBox.SelectedValue.ToString());
                SqlDataAdapter da = new SqlDataAdapter(query, cn);
                DataTable dt = new DataTable();
                da.Fill(dt);
                chargeBox.DataSource = dt;
                chargeBox.DisplayMember = "username";
                chargeBox.ValueMember = "userid";
            }
        }上面时我的联动代码,可以正常联动,但是奇怪的是不管我是否动了第一个deptcomboBox,只要一关闭窗体(点窗口关闭按钮)或者dispose(),就会在 string query = "..." 这一句上报:未将对象引用设置到对象的实例;如果该窗口只是close()的话,则不会报错,怎么回事呢?

解决方案 »

  1.   

    ExecuteReader()
    下试试如果还是不行的话,你可以做好异常了.
      

  2.   

    和ExecuteReader()无关吧。
    只要窗口不关闭,我调整deptcomboBox,deptcomboBox.SelectedValue都会有值,但窗口一关,从局部变量窗口里观察发现deptcomboBox.SelectedValue竟然变成-1了。为什么值不会一直保留呢?怪,真怪
      

  3.   

    在string query = " ..." + ... 这句代码处设置断点,发现窗口关闭后,还会执行这一句,也就是说窗口关闭时是会引发deptcomboBox_SelectedIndexChanged事件的。那么有没有可能不触发该事件呢,或者用什么方法来规避这个问题呢?
      

  4.   

    前面加一个判断:if(deptcomboBox.SelectedValue>0)...
      

  5.   

    顶楼上的 当if(deptcomboBox.SelectedValue>0)以后在发生事件
      

  6.   

    晕,加了if(deptcomboBox.SelectedValue>0),“未将对象引用设置到对象的实例”就报在这句了
      

  7.   


    if(deptcomboBox.SelectedValue!=null &&deptcomboBox.SelectedValue>0)改成这样。
      

  8.   

    弱弱的问一句 为什么在给deptcomboBox.SelectedValue赋值时可以用 deptcomboBox.SelectedValue =1这样的形式,但是在比较时就不能用if(deptcomboBox.SelectedValue =1)这样的形式呢?
      

  9.   

    if(deptcomboBox.SelectedValue 1)
    “=”在C#中是赋值符,不是相等运算符。
      

  10.   

    错了,刚才笔误。if(deptcomboBox.SelectedValue == 1) 就是不对啊。会提示什么object和int类型不能比较
      

  11.   

    说真的,跟着你这样绕下去,我都不知道我都说了些什么了。应该是这样判断:if(deptcomboBox.SelectedIndex>0)
    至于说为什么不能比较,很简单了,SelectedValue是Object类型,实际类型需要你自己确定,不能与int比较那是很自然的(除非本来是int的,还可以转换为int后再比较)。