siwmas
siwmas

Reputation: 389

How to set selectedValue to Controls.Combobox in c#?

I have a combobox and I see that I am not able to set SelectedValue like this:

cmbA.SelectedValue = "asd"

So I tried to do this

cmbA.SelectedIndex = cmbA.FindString("asd");

Based on How to set selected value from Combobox?

I realised that my combobox is a System.Windows.Controls.ComboBox and not a System.Windows.Forms.ComboBox.

That means that FindString() is not available.

Based on User Control vs. Windows Form I get that forms are the container for controls, but I dont get why the Controls.ComboBox does not implement FindString().

Do I have to write my own code to do what FindString() does for Forms.ComboBox?

Upvotes: 0

Views: 1866

Answers (2)

Rachel
Rachel

Reputation: 132548

WPF ComboBoxes are not the same as WinForms ones. They can display a collection of objects, instead of just strings.

Lets say for example if I had

myComboBox.ItemsSource = new List<string> { "One", "Two", "Three" };

I could just use the following line of code to set the SelectedItem

myComboBox.SelectedItem = "Two";

We're not limited to just strings here. I could also say I want to bind my ComboBox to a List<MyCustomClass>, and I want to set the ComboBox.SelectedItem to a MyCustomClass object.

For example,

List<MyCustomClass> data = new List<MyCustomClass> 
{ 
    new MyCustomClass() { Id = 1, Name = "One" },
    new MyCustomClass() { Id = 2, Name = "Two" },
    new MyCustomClass() { Id = 3, Name = "Three" }
};
myComboBox.ItemsSource = data;
myComboBox.SelectedItem = data[0];

I could also tell WPF I want to consider the Id property on MyCustomClass to be the identifying property, and I want to set MyCombbox.SelectedValue = 2, and it will know to find the MyCustomClass object with the .Id property of 2, and set it as selected.

myComboBox.SelectedValuePath = "Id";
myComboBox.SelectedValue = 2;

I could even set the Display Text to use a different property using

myComboBox.DisplayMemberPath = "Name";

To summarize, WPF ComboBoxes work with more than just Strings, and because of the expanded capabilities, FindString is not needed. What you are most likely looking for is to set the SelectedItem to one of the objects that exist in your ItemsSource collection.

And if you're not using ItemsSource, then a standard for-each loop should work too

foreach(ComboBoxItem item in myComboBox.Items)
{
    if (item.Content == valueToFind)
        myComboBox.SelectedItem = item;
}

Upvotes: 1

SamY
SamY

Reputation: 88

I don't know what you are trying to do but I think it would be easier to just do

cmbA.Text = "String";

That way you get your selected item

Else I found an intersting article that could help you out: Difference between SelectedItem, SelectedValue and SelectedValuePath

Upvotes: 0

Related Questions