ComboBox在Clear()之后有其旧值

Sco*_*ion 8 .net c# combobox winforms

我有两个comboBox cb_Brandcb_Model一个winForm.

cb_Model填充品牌选择的价值.问题是:如果我们选择任何品牌并选择该品牌下的任何型号,cb_Model则不会失去之前所选型号的价值.例如:如果我们选择品牌奥迪和型号A3并选择品牌福特,当我点击cb_Model选择模型时,它会将A3显示为所选模型,但列表中的其他模型仍属于福特.

我的代码是:

private void cb_Brand_SelectedIndexChanged(object sender, EventArgs e)
{
    // Clear Current Data
    cb_Model.Text = "";
    cb_Model.Items.Clear();

    CarModel _carmodel = new CarModel ();

    // Get Selected Car Brnad
    int CarBrandID = _carmodel .GetCarBrandID(cb_Brand.Text);

    //Enable choice of Model
    SortedList<int, Model> colM;

    colM = Model.ReadModel(CarBrandID);

    cb_Model.DisplayMember = "ModelText";
    foreach (Model objM in colM.Values)
    {
        cb_Model.Items.Add(objM);
    }
}
Run Code Online (Sandbox Code Playgroud)

任何想法请..谢谢


无法找到原因,但使用临时修复程序进行了整理:

private void cb_Model_Click(object sender, EventArgs e)
{
    cb_Model.Text = "";
}
Run Code Online (Sandbox Code Playgroud)

非常感谢你们欢呼

Iai*_*ard 7

而不是像这样手动添加项目:

foreach (Model objM in colM.Values)
{
    cb_Model.Items.Add(objM);
}
Run Code Online (Sandbox Code Playgroud)

让.NET为您处理它并将其替换为:

cb_Model.DataSource = colMValues;
Run Code Online (Sandbox Code Playgroud)

这将把数据绑定到列表并在设置数据源时自动刷新组合框项.

你也不再需要这些线了:

// Clear Current Data
cb_Model.Text = "";
cb_Model.Items.Clear();
Run Code Online (Sandbox Code Playgroud)

有关绑定列表(和其他数据源)到ComboBoxes的更多信息,请阅读此内容:

如何:将Windows窗体ComboBox或ListBox控件绑定到数据(MSDN)


IAb*_*act 6

@ w69rdy提出了一个很好的解决方案.

cb_Model没有改变它的原因value是因为你从未改变过这个值.cb_Model.Items.Clear()不会更改所选索引; 只有项目从组合框中删除.

使用问题中提供的代码示例:

// Clear Current Data
cb_Model.Text = "";
cb_Model.Items.Clear();
cb_Model.SelectedIndex = -1;    // would effectively clear the previously selected value.
Run Code Online (Sandbox Code Playgroud)