Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ComboBox has its old value after Clear()

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

like image 853
Scorpion Avatar asked Jun 10 '11 13:06

Scorpion


People also ask

How do I stop a ComboBox from editing?

We can disable the combobox by passing the state as “readonly”.

How do I find the index of a ComboBox?

The Combobox widget allows you to create a dropdown list in which the list of items can be selected instantly. However, if you want to get the index of selected items in the combobox widget, then you can use the get() method. The get() method returns an integer of the selected item known as the index of the item.


2 Answers

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)

like image 67
Iain Ward Avatar answered Sep 21 '22 17:09

Iain Ward


@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.
like image 23
IAbstract Avatar answered Sep 21 '22 17:09

IAbstract