關於SelectedValue的眾多解決方案


Combox聯動效果

如上圖所示窗體

實現點擊年級下拉框時,加載對應的科目信息

在此過程中會遇到如下問題

問題一:

步驟一:

Load事件中顯示如下代碼:

先綁定數據源,后綁定displaymember 和 valueMember屬性

就會報錯

 private void SelectStudentResult_Load(object sender, EventArgs e)
        {
            //給年級下拉框賦值  
            List<Grade> gradeList= gradeBLL.LoadGradeInfoToCobList();
            cobGradeList.DataSource = gradeList;
            cobGradeList.DisplayMember = "GradeName";
            cobGradeList.ValueMember = "GradeId";   
        }

步驟二:

在年級下拉框的SelectedIndexChanged事件中加入如下代碼

 private void cobGradeList_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {             
                    cobSubjectList.DataSource = subBLL.GetSubjectInfoByGradeID(Convert.ToInt32(cobGradeList.SelectedValue));
                    cobSubjectList.DisplayMember = "subjectName";
                    cobSubjectList.ValueMember = "subjectid";
            }
            catch (SqlException sqlex)
            {

                throw sqlex;
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

 

錯誤信息:

下面我們來分析一下出錯的原因

原因就出在代碼的執行順序上 我們可以用打斷點的方式來查看

當代碼執行到紅框標識處時,代碼塊直接跳到SelectedIndexChanged事件中,此時控件的displayMember和valueMember屬性還未被附上值

所以當藍色標識框去拿年級下拉框的隱藏值時就會報錯

解決方案:將load事件中的代碼改為

coblist.DisplayMember
coblist.ValueMember
coblist.DataSource=list;

解決方案二:

就是用SelectedItem代替SelectedValue

Load事件中的代碼不變

更改如下代碼

private void cobGradeList_SelectedIndexChanged(object sender, EventArgs e)
        {
            Grade grade = (Grade)cobGradeList.SelectedItem;
            int gradeid = Convert.ToInt32(grade.GradeId);
            cobSubjectList.DataSource = subBLL.GetSubjectInfoByGradeID(gradeid);
            cobSubjectList.DisplayMember = "subjectName";
            cobSubjectList.ValueMember = "subjectid";
        }

此處是泛型集合

如果是DataTable

更改的代碼為

DataRowView  dr=(DataRowView)cobListGradeList.SelectedItem;

int gradeid=Convert.ToInt32(dr["gradeid"]);

不知道這些東西會不會給有需要幫助的人帶來一點點提示,如有意見歡迎指出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM