简单说一下:
控件:
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却显示的不是第一个。我这里测试是是第三个数据的名字。
控件:
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却显示的不是第一个。我这里测试是是第三个数据的名字。
我做了单步跟踪,程序是在DataSource绑定的时候触发事件的。
程序启动的时候是没有默认数据的,在绑定的时候才触发的SelectedIndexChanged事件,所以找不到Value。
不过,之后手动选择结果没错。
手动添加SelectedIndexChanged的事件处理程序
comboBox1.SelectedIndexChanged -= new EventHandler(comboBox1_SelectedIndexChanged);comboBox1.SelectedIndexChanged += new EventHandler(comboBox1_SelectedIndexChanged);
DataSet dsClass = DbACE.Query("select * from class");
cboClass.DataSource = dsClass.Tables["ds"];
cboClass.DisplayMember = "class"; //班级列表
cboClass.ValueMember = "cid"; //班级ID
//选择列表初始化已经完成,再进行获取覆盖一次姓名
txtStudentName.Text=cboStudentID.SelectedValue.ToString();
其他代码不变。这样就能正常现实了。不过如果有更好的方法,麻烦贴出来!