ComboBox在Clear()之后有其旧值

时间:2011-06-10 13:00:06

标签: c# .net winforms combobox

我在winForm上有两个comboBox cb_Brandcb_Model

cb_Model填充品牌Select的值。 问题是:如果我们选择任何品牌并选择该品牌下的任何型号,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);
    }
}

任何想法请.. 感谢


无法找到原因但使用临时解决方案进行整理:

private void cb_Model_Click(object sender, EventArgs e)
{
    cb_Model.Text = "";
}

非常感谢你们 欢呼声

8 个答案:

答案 0 :(得分:7)

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

foreach (Model objM in colM.Values)
{
    cb_Model.Items.Add(objM);
}

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

cb_Model.DataSource = colMValues;

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

您也不再需要这些线条了:

// Clear Current Data
cb_Model.Text = "";
cb_Model.Items.Clear();

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

How to: Bind a Windows Forms ComboBox or ListBox Control to Data (MSDN)

答案 1 :(得分: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.

答案 2 :(得分:3)

我现在遇到同样的问题,Combobox的ResetText方法为我解决了这个问题

答案 3 :(得分:1)

这样可行

combobox.ResetText();

答案 4 :(得分:0)

我试过你的例子。对我而言,它应该有所作为。 您可以尝试将cb_model.SelectedText设置为“”或将SelectedItem设置为null

答案 5 :(得分:0)

我发现保持数据源的范围接近组合框的加载对我有用。我有一个具有类级别范围的数据表但它不清楚,但后来我将它带入功能级范围并在加载后清除它并且这有效。

答案 6 :(得分:0)

我有类似的问题,尝试过cmb.resettext它清除文本但不是值。在我的加载表单中我有以下代码: Dim cmd As New SqlCommand("SELECT stud_id,name FROM student_details WHERE stud_id NOT IN (SELECT stud_id FROM student_details WHERE hostel_id!=0)", sqlcont.Conn) Dim dr As SqlDataReader = cmd.ExecuteReader Dim dat As New DataTable Dim j As Integer For j = 0 To dat.Rows.Count - 1 dr.Read() Next dat.Load(dr) cmbstud.DisplayMember = "name" cmbstud.ValueMember = "stud_id" cmbstud.DataSource = New BindingSource(dat, Nothing) dr.Close() 在我的btnhostel点击事件中,我有以下代码: frmallocateHostel_Load(没什么,没什么) 我试图重新加载我的数据集,因此我的组合框。使用cmbstud.resettext只是清除文本而不是值。

答案 7 :(得分:0)

我遇到了同样的问题

combobox1.SelectedIndex=-1

它有效。