2011-09-22 143 views
0

我想让客户选择从COMBOBOX中选择一个城市,一旦城市选择,该城市的街道列表应该在COMBOBOX2中。我尝试了下面的代码,并且在第一次运行期间出现错误,也许有人可以向我解释这一点?组合框选定的值更改

private void Search_by_Apartment_Load(object sender, EventArgs e) 
    { 
     List<Cities> city = DAL.cities(); 
     cmBxCity.DataSource = city;//Here he ran the second function, why? 
     cmBxCity.DisplayMember = "city"; 
     cmBxCity.ValueMember = "cityID"; 
    } 

    private void cmBxCity_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     List<Streets> street = DAL.streets(Convert.ToInt32(cmBxCity.SelectedText)); 
     // List<Streets> street = DAL.streets(Convert.ToInt32(cmBxCity.SelectedValue)); 
     comBxStreet.DataSource = street; 
     comBxStreet.DisplayMember = "street"; 
     //cmBxCity.ValueMember = "cityID"; 

    } 
+2

错误是什么? –

+0

你收到的错误是什么?是否有一个原因,你使用SelectedText而不是SelectedValue来选择你的街道? – Brettski

+0

@Brettski,是的因为价值获得“”,我不知道方式?和SelectedValue获取字符串,它也不是我想要做的事情吗? – samy

回答

0

只要所选索引以编程方式或由用户更改,就会触发SelectedIndexChanged事件。

作为的Davide PIRSA指出,当改变cmBxCity的DataSource,你正在编程改变所选择的索引,因此,在这行烧成“cmBxCity.SelectedIndexChanged”事件:

cmBxCity.DataSource = city;//Here he ran the second function, why? 

一种可能的解决方案是改为使用SelectionChangeCommitted事件,该事件仅在用户进行更改时触发。

+0

非常感谢 – samy

0
当你指定的从一无所有到一个项目 cmBxCity控制其将selectedItem变化 DataSource,这触发事件处理程序 cmBxCity_SelectedIndexChanged

在你说的COMBOBOX和COMBOBOX2的问题中,但在代码中只有一个控件是:cmBxCity

不应该在第二个控件中显示街道:cmBxStreet

+0

我更新我的代码 – samy

+0

你说得对。我该怎么办他不会第一次来到cmBxCity_SelectedIndexChanged? – samy

+0

是的,但现在清楚为什么当您分配数据源时第二个方法触发为什么? –

相关问题