comboBox选择的值更改

时间:2011-09-22 19:48:00

标签: c# winforms

我想让客户选择从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 :(得分: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事件代替,该事件仅针对用户所做的更改触发。