窗体控件如下:
        private void frmDataSetAdvance_Load(object sender, EventArgs e)
        {
            //sql语句
            sql="select * from tblClass";
            //根据sql语句创建DataAdapter对像 sda
            sda = new SqlDataAdapter(sql, DBOpen.conn);
            //填充数据集,表名为tblClass
            sda.Fill(ds, "tblClass");  
            //绑定数据集ds中表tblClass到第一个列表框cboClassName
            this.cboClassName.DataSource = ds.Tables["tblClass"];
            //绑定cboClassName显示给用户的内容成员
            this.cboClassName.DisplayMember = ds.Tables["tblClass"].Columns["ClassName"].ToString();
            //绑定cboClassName各项值的成员
            this.cboClassName.ValueMember = ds.Tables["tblClass"].Columns["ClassID"].ToString();
            //将选择项的显示文件赋值给txtClassSelectedItem的Text
            this.txtClassSelectedItem.Text = this.cboClassName.SelectedValue.ToString();
            //调用方法显示cboGradeID的内容
            FillSecondeComboBox();
            //this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
        }
        /// <summary>
        /// 列表框cboClassName选择项改变事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cboClassName_SelectedIndexChanged(object sender, EventArgs e)
        {
            //赋值给第一个文件框txtClassSelectedItem
            this.txtClassSelectedItem.Text = this.cboClassName.SelectedValue.ToString();
            FillSecondeComboBox();
            //this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString(); 
            //当窗体加载时, 错误提示:未将对象引用设置到对象的实例            //解决问题
            if (this.cboGradeID.Items.Count > 0)    //****
            {
                this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
            }
           
        }
        /// <summary>
        /// 根椐cboClassName列表框的选择项的变化动态填充新数据到数据集ds的表tblGrade中,然后与cboGradeID绑定
        /// </summary>
        private void FillSecondeComboBox()
        {
            sql = string.Format("select * from tblGrade where ClassID='{0}'",
                this.cboClassName.SelectedValue.ToString());
            sda = new SqlDataAdapter(sql, DBOpen.conn);
            //清空数据集ds中的表tblGrade内容
            if (ds.Tables.Count>1)   //怎么样判断数据集ds中存在表tblGrade
            {
                ds.Tables["tblGrade"].Clear(); 
            }
            //填充内容到数据集ds表tblGrade中
            sda.Fill(ds, "tblGrade");
            //绑定数据集ds表tblGrade到cboGradeID列表框
            this.cboGradeID.DataSource = ds.Tables["tblGrade"];           
            this.cboGradeID.DisplayMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString();
            this.cboGradeID.ValueMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString();
            
        }
        /// <summary>
        /// 选择项改变事件,动态改变下面文件框txtGradeSelectedItem的文本
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cboGradeID_SelectedIndexChanged(object sender, EventArgs e)        {
            if (this.cboGradeID.Items.Count > 0)
            {                
                //this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedValue.ToString();
                //当cboClassName选中项改变时,    错误提示:未将对象引用设置到对象的实例
                //解决问题                //this.txtGradeSelectedItem.Text = this.cboGradeID.SelectedText;
                //上面的问题解决,但它只显示第一项的文本(好像是//****位置的功劳),改变项后不显示内容                this.txtGradeSelectedItem.Text = "???";
            }
            else
            {
                this.txtGradeSelectedItem.Text = "没有数据!";
            }
        }上面是代码部分,其中标红的地方就是问题的所在了。
本人在北大青鸟学S1的课程,拜托各位高手帮帮忙看下,谢谢!!!!

解决方案 »

  1.   

     this.txtGradeSelectedItem.Text = this.cboGradeID.Items[cboGradeID.SelectIndex].ToString();   
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 
    http://feiyun0112.cnblogs.com/
      

  2.   

    这种情况我一般是这样写的:if(cboGradeID.SelectedIndex >= 0)
    {
      txtGradeSelectedItem.Text = cboGradeID.SelectedItem.ToString();
    }
      

  3.   


    if (cboGradeID.SelectedItem != null)
                {
                    txtGradeSelectedItem.Text = cboGradeID.SelectedItem.ToString();
                }
                else
                {
                    txtGradeSelectedItem.Text = "";
                }
      

  4.   

    //这里怎么都是GradeId?
    this.cboGradeID.DisplayMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString();
    this.cboGradeID.ValueMember = ds.Tables["tblGrade"].Columns["GradeId"].ToString(); 
    //把下面这行代码
    this.txtGradeSelectedItem.Text = "???"; 
    //替换为
    DataRowView rowView = (DataRowView)cboGradeID.SelectedItem;
    txtGradeSelectedItem.Text = rowView.Row["GradeName"].ToString(); //这个要根据你绑定的字段了,如果上面确实都是GradeId,那就换成GradeId吧
      

  5.   

    第一次来到CSDN,谢谢各位热心大哥、大姐的帮忙!Thank you very much!由于分也不多,分配给各位的分如果不合理,还请海涵!借鉴1楼feiyun0112 和2楼lijunfeng 异常没有了if(this.cboGradeID.SelectedIndex > 0)
    {
    this.txtGradeSelectedItem.Text=this.cboGradeID.Items[cboGradeID.SelectedIndex].ToString();
    }
    但是问题还没有解决,第二个文件框txtGradeSelectedItem只显示第一项,
    当改变cboGradeID的选项时显示内容为:“System.Data.DataRowView”。
    根据3楼 flyjimi和5楼 root_,问题解决了
     if (this.cboGradeID.SelectedItem != null)
         {
             DataRowView rowView = (DataRowView)cboGradeID.SelectedItem;
             txtGradeSelectedItem.Text = rowView.Row["GradeID"].ToString();
         }
     else
        {
             txtGradeSelectedItem.Text = "没有选择项";
        }
    3楼和5楼同样都很重要,个人认为5楼是解决该问题的关键!问题虽然解决了,但是root_的做法由于没有学过,
    有点不懂,还想请root_麻烦你解释一下,越详细越好,谢谢啦 !经后我会经常来这里的,再次感谢大家的热心帮忙!
      

  6.   

    对了,5楼提到的怎么会有两个GradeID,原因是我这里班级表中只有班级编号,没有写班级名称GradeName
    有点不规范了
    呵呵!