我想让客户选择从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";
}
答案 0 :(得分:0)
当您分配DataSource
控件的cmBxCity
时,其selectedItem从无任何内容更改为一个项目,这会触发事件处理程序cmBxCity_SelectedIndexChanged
。
在你谈论COMBOBOX和COMBOBOX2的问题中,但在代码中只有一个控件:cmBxCity
。
不应该在名为cmBxStreet
的第二个控件中显示街道吗?
答案 1 :(得分:0)
只要以编程方式或用户更改选定的索引,就会触发SelectedIndexChanged
事件。
正如Davide Pirsa指出的那样,当您更改cmBxCity的DataSource时,您将以编程方式更改所选索引,从而在此行触发“cmBxCity.SelectedIndexChanged”事件:
cmBxCity.DataSource = city;//Here he ran the second function, why?
一种可能的解决方案是使用SelectionChangeCommitted
事件代替,该事件仅针对用户所做的更改触发。