当使用Combobox控件时,出现SelectedValue的值为“System.Data.DataRowView”的原因有两个:在Combobox的DataSource不为空的情况下,要么是没有为ValueMember赋值,要么是赋值赋错了,这两种情况下系统就会把SelectedValue的默认值输出来。
private void FrmSelectStudentResult_Load(object sender, EventArgs e)
{
this.cboGrade.DataSource = GradeService.GetGradeList();
this.cboGrade.DisplayMember = "GradeName";
this.cboGrade.ValueMember = "GradeId";
}
private void cboGrade_SelectedIndexChanged(object sender, EventArgs e)
{
this.cboSubject.DataSource = SubjectService.GetSubjectDataByGradeId(gid);
int gid = Convert.ToInt32(cboGrade.SelectedValue);
this.cboSubject.DisplayMember = "SubjectName";
this.cboSubject.ValueMember = "SubjectNo";
}
运行后,出现类型转换错误,查找原因是因为在绑定的时候也会触发SelectedIndexChanged事件,这时还没有指定ValueMember,所以取到的值为System.Data.DataRowView,因此,我们只需要调整一下代码的顺序就可以。
private void FrmSelectStudentResult_Load(object sender, EventArgs e)
{
this.cboGrade.DisplayMember = "GradeName";
this.cboGrade.ValueMember = "GradeId";
this.cboGrade.DataSource = GradeService.GetGradeList();
}
private void FrmSelectStudentResult_Load(object sender, EventArgs e)
{
this.cboGrade.DataSource = GradeService.GetGradeList();
this.cboGrade.DisplayMember = "GradeName";
this.cboGrade.ValueMember = "GradeId";
}
private void cboGrade_SelectedIndexChanged(object sender, EventArgs e)
{
this.cboSubject.DataSource = SubjectService.GetSubjectDataByGradeId(gid);
int gid = Convert.ToInt32(cboGrade.SelectedValue);
this.cboSubject.DisplayMember = "SubjectName";
this.cboSubject.ValueMember = "SubjectNo";
}
运行后,出现类型转换错误,查找原因是因为在绑定的时候也会触发SelectedIndexChanged事件,这时还没有指定ValueMember,所以取到的值为System.Data.DataRowView,因此,我们只需要调整一下代码的顺序就可以。
private void FrmSelectStudentResult_Load(object sender, EventArgs e)
{
this.cboGrade.DisplayMember = "GradeName";
this.cboGrade.ValueMember = "GradeId";
this.cboGrade.DataSource = GradeService.GetGradeList();
}