ComboBox has its old value after Clear()

人走茶凉 提交于 2019-12-28 17:57:39

问题


I have two comboBox cb_Brand and cb_Model on a winForm.

cb_Model populates values on brand Select. the problem is: if we select the brand any and select the any model under that brand, cb_Model does not loose the value of previous model selected. for example: If we select the brand Audi and model A3 and the select the Brand Ford, when I click on cb_Model to select the model, it displayed the A3 as selected model, but still other models in list are belong to ford.

my code is:

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);
    }
}

Any Idea Please.. Thanks


unable to find the reason but sorted out with a temp fix:

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

Thanks a lot guys cheers


回答1:


Instead of adding the items manually like this:

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

Let .NET take care of it for you and replace it with this:

cb_Model.DataSource = colMValues;

Which will bind the data to the list and refreshes the comboboxes items automatcially when a data source is set.

You will also not need these lines anymore:

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

Have a read of this for more info on binding lists (and other data sources) to ComboBoxes:

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




回答2:


@w69rdy suggests an excellent solution.

The reason cb_Model did not change it's value is because you never changed the value. cb_Model.Items.Clear() does not change the selected index; only the items are removed from the combo box.

Using the code sample provided in your question:

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



回答3:


i had same problem now and Combobox's ResetText method solved the problem for me




回答4:


This would work

combobox.ResetText();



回答5:


I've tried your example. For me it worked as it should have. You could try setting the cb_model.SelectedText to "" or SelectedItem to null




回答6:


I found that keeping the scope of the data source near the loading of the combo box worked for me. I had a datatable with class level scope and it did not clear but then I brought it into function level scope and had it clear after the load and this worked.




回答7:


I have a similar problem,tried cmb.resettext it clears text but not value.In my load form I have the below code: 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() In my btnhostel click event I have the below code: frmallocateHostel_Load(Nothing, Nothing) this I put in attempt to reload my dataset and thus my comboboxes.Using cmbstud.resettext simply clears the text not the value.




回答8:


I have same problem then I used

combobox1.SelectedIndex=-1

and it works.



来源:https://stackoverflow.com/questions/6306719/combobox-has-its-old-value-after-clear

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!