简单说一下:
    控件:
    cboClass
    cboStudentID
    txtStudentName
    初始化的时候执行:
       DataSet dsClass = DbACE.Query("select * from class");
       cboClass.DataSource = dsClass.Tables["ds"];
       cboClass.DisplayMember = "class"; //班级列表
       cboClass.ValueMember = "cid";  //班级ID    控件cboClass的SelectedIndexChanged事件:
       DataRowView drv = (DataRowView)cboClass.SelectedItem;
       string gId = drv.Row["cid"].ToString(); //获取班级ID
       string sql = string.Format("select * from student where classid = {0}", gId);
       DataSet dsStudentID = DbACE.Query(sql);
       cboStudentID.DataSource = dsStudentID.Tables["ds"]; //绑定数据
       cboStudentID.DisplayMember = "studentid"; //学号
       cboStudentID.ValueMember = "name"; //姓名
    
    控件cboStudentID的SelectedIndexChanged事件:
       DataRowView drv = (DataRowView)cboStudentID.SelectedItem;
       txtStudentName.Text = drv.Row["name"].ToString(); //获取姓名    程序运行时,cboClass和cboStudentID默认显示的都是第一个数据,
    但是txtStudentName却显示的不是第一个。我这里测试是是第三个数据的名字。

解决方案 »

  1.   

    txtStudentName.Text=cboStudentID.SelectedValue.ToString()
      

  2.   

    2楼方法不行。启动显示结果“System.Data.DataRowView”
    我做了单步跟踪,程序是在DataSource绑定的时候触发事件的。
    程序启动的时候是没有默认数据的,在绑定的时候才触发的SelectedIndexChanged事件,所以找不到Value。
    不过,之后手动选择结果没错。
      

  3.   

    ComboBox的Text修改为ComboBox中其他选项的内容时,自然会导致该选项被选中,于是触发了SelectedIndexChanged事件
    手动添加SelectedIndexChanged的事件处理程序
    comboBox1.SelectedIndexChanged -= new EventHandler(comboBox1_SelectedIndexChanged);comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
      

  4.   

    我现在初始化的时候执行:
      DataSet dsClass = DbACE.Query("select * from class");
      cboClass.DataSource = dsClass.Tables["ds"];
      cboClass.DisplayMember = "class"; //班级列表
      cboClass.ValueMember = "cid"; //班级ID
      //选择列表初始化已经完成,再进行获取覆盖一次姓名
      txtStudentName.Text=cboStudentID.SelectedValue.ToString();
    其他代码不变。这样就能正常现实了。不过如果有更好的方法,麻烦贴出来!