combobox2根據combobox1的值繫結,第一次載入時的問題
阿新 • • 發佈:2019-01-22
我做的是這樣的:combobox2根據combobox1中的值來繫結的,第一次就需要獲取到combobox1中的值,但這個時候因為combobox1還沒載入到頁面中,還是實體,就開始SelectedIndexChanged該方法了,無法轉化實體,就會報錯
combobox1的繫結
this.cbo1.DataSource = 類名.方法名();
this.cbo1.ValueMember = "id";
this.cbo1.DisplayMember = "name";
一般我們會使用SelectedIndexChanged方法來做
//繫結combobox2方法
private void cbo1_SelectedIndexChanged(object sender, EventArgs e)
{
this.cbo2.DataSource = 類名.方法名(Convert.ToInt32(this.cbo1.SelectedValue));
this.cbo2.ValueMember = "id";
this.cbo2.DisplayMember = "name";
}
最後發現一種笨笨的辦法
combobox1使用SelectionChangeCommitted方法(該方法是在選擇選項後並關閉了下拉後才會執行)這樣第一次載入時不會出錯,但是combobox2不會有資料,combobox1操作後才會響應,但這樣不是我們要做的效果!這時我們要在窗體載入事件中繫結一次combobox2,這樣就完美了!
正確方式:
如果有大神有好辦法,歡迎來頂!!!/// <summary> /// 窗體載入事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_Load(object sender, EventArgs e) { //繫結combobox1 this.cbo1.DataSource = 類名.方法名(); this.cbo1.ValueMember = "id"; this.cbo1.DisplayMember = "name"; //繫結combobox2 this.cbo2.DataSource = 類名.方法名(Convert.ToInt32(this.cbo1.SelectedValue)); this.cbo2.ValueMember = "id2"; this.cbo2.DisplayMember = "name2"; } /// <summary> /// combobox1發生改變時 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void cbo1_SelectionChangeCommitted(object sender, EventArgs e) { //繫結combobox2 this.cbo2.DataSource = 類名.方法名(Convert.ToInt32(this.cbo1.SelectedValue)); this.cbo2.ValueMember = "id2"; this.cbo2.DisplayMember = "name2"; }