How do I set the selected item in a comboBox to match my string using C#?

C#WinformsCombobox

C# Problem Overview


I have a string "test1" and my comboBox contains test1, test2, and test3. How do I set the selected item to "test1"? That is, how do I match my string to one of the comboBox items?

I was thinking of the line below, but this doesn't work.

comboBox1.SelectedText = "test1"; 

C# Solutions


Solution 1 - C#

This should do the trick:

Combox1.SelectedIndex = Combox1.FindStringExact("test1")

Solution 2 - C#

Have you tried the Text property? It works for me.

ComboBox1.Text = "test1";

The SelectedText property is for the selected portion of the editable text in the textbox part of the combo box.

Solution 3 - C#

Assuming that your combobox isn't databound you would need to find the object's index in the "items" collection on your form and then set the "selectedindex" property to the appropriate index.

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

Keep in mind that the IndexOf function may throw an argumentexception if the item isn't found.

Solution 4 - C#

If the items in your ComboBox are strings, you can try:

comboBox1.SelectedItem = "test1";

Solution 5 - C#

ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Try this in windows Form.

Solution 6 - C#

For me this worked only:

foreach (ComboBoxItem cbi in someComboBox.Items)
{
    if (cbi.Content as String == "sometextIntheComboBox")
    {
        someComboBox.SelectedItem = cbi;
        break;
    }
}

MOD: and if You have your own objects as items set up in the combobox, then substitute the ComboBoxItem with one of them like:

foreach (Debitor d in debitorCombo.Items)
{
    if (d.Name == "Chuck Norris")
    {
        debitorCombo.SelectedItem = d;
        break;
    }
}

Solution 7 - C#

SelectedText is to get or set the actual text in the string editor for the selected item in the combobox as documented here . This goes uneditable if you set:

comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

Use:

comboBox1.SelectedItem = "test1";

or:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");

Solution 8 - C#

I've used an extension method:

public static void SelectItemByValue(this ComboBox cbo, string value)
{
    for(int i=0; i < cbo.Items.Count; i++)
    {
        var prop = cbo.Items[i].GetType().GetProperty(cbo.ValueMember);
        if (prop!=null && prop.GetValue(cbo.Items[i], null).ToString() == value)
        {
             cbo.SelectedIndex = i;
             break;
        }
    } 
}

Then just consume the method:

ddl.SelectItemByValue(value);

Solution 9 - C#

comboBox1.SelectedItem.Text = "test1";

Solution 10 - C#

Supposing test1, test2, test3 belong to comboBox1 collection following statement will work.

comboBox1.SelectedIndex = 0; 

Solution 11 - C#

I've filled my ComboBox with een DataTable filled from a database. Then I've set the DisplayMember and the ValueMember. And I use this code to set the selected item.

foreach (DataRowView Row in ComboBox1.Items)
{
    if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}

Solution 12 - C#

This solution is based on MSDN with some modifications I made.

  • It finds exact or PART of string and sets it.

      private int lastMatch = 0;
      private void textBoxSearch_TextChanged(object sender, EventArgs e)
      {
          // Set our intial index variable to -1.
          int x = 0;
          string match = textBoxSearch.Text;
          // If the search string is empty set to begining of textBox
          if (textBoxSearch.Text.Length != 0)
          {
              bool found = true;
              while (found)
              {
                  if (comboBoxSelect.Items.Count == x)
                  {
                      comboBoxSelect.SelectedIndex = lastMatch;
                      found = false;
                  }
                  else
                  {
                      comboBoxSelect.SelectedIndex = x;
                      match = comboBoxSelect.SelectedValue.ToString();
                      if (match.Contains(textBoxSearch.Text))
                      {
                          lastMatch = x;
                          found = false;
                      }
                      x++;
                  }
              }
          }
          else
              comboBoxSelect.SelectedIndex = 0;
      }
    

I hope I helped!

Solution 13 - C#

  • Enumerate ListItems in combobox
  • Get equal ones listindex set combobox
  • Set listindex to the found one.

But if I see such a code as a code reviewer, I would recommend to reconsider all the method algorithm.

Solution 14 - C#

You don't have that property in the ComboBox. You have SelectedItem or SelectedIndex. If you have the objects you used to fill the combo box then you can use SelectedItem.

If not you can get the collection of items (property Items) and iterate that until you get the value you want and use that with the other properties.

hope it helps.

Solution 15 - C#

_cmbTemplates.SelectedText = "test1"

or maybe

_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");

Solution 16 - C#

I used KeyValuePair for ComboBox data bind and I wanted to find item by value so this worked in my case:

comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");

Solution 17 - C#

Find mySecondObject (of type MyObject) in combobox (containing a list of MyObjects) and select the item:

foreach (MyObject item in comboBox.Items)
{
   if (item.NameOrID == mySecondObject.NameOrID)
    {
        comboBox.SelectedItem = item;
        break;
    }
}

Solution 18 - C#

  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

For your case you can use

DropDownList.Items.FindByText("Text");

Solution 19 - C#

combo.Items.FindByValue("1").Selected = true;

Solution 20 - C#

All methods, tricks, and lines of code setting ComboBox item will not work until the ComboBox has a parent.

Solution 21 - C#

I have created a Function which will return the Index of the Value

        public static int SelectByValue(ComboBox comboBox, string value)
        {
            int i = 0;
            for (i = 0; i <= comboBox.Items.Count - 1; i++)
            {
                DataRowView cb;
                cb = (DataRowView)comboBox.Items[i];
                if (cb.Row.ItemArray[0].ToString() == value)// Change the 0 index if your want to Select by Text as 1 Index
                {
                    return i;
                }
            }
            return -1;
        }

Solution 22 - C#

this works for me.....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];

Solution 23 - C#

I know this isn't what the OP asked but could it be that they don't know? There are already several answers here so even though this is lengthy I thought it could be useful to the community.

Using an enum to fill a combo box allows for easy use of the SelectedItem method to programmatically select items in the combobox as well as loading and reading from the combobox.

public enum Tests
    {
        Test1,
        Test2,
        Test3,
        None
    }

// Fill up combobox with all the items in the Tests enum
    foreach (var test in Enum.GetNames(typeof(Tests)))
    {
        cmbTests.Items.Add(test);
    }

    // Select combobox item programmatically
    cmbTests.SelectedItem = Tests.None.ToString();

If you double click the combo box you can handle the selected index changed event:

private void cmbTests_SelectedIndexChanged(object sender, EventArgs e)
{
    if (!Enum.TryParse(cmbTests.Text, out Tests theTest))
    {
        MessageBox.Show($"Unable to convert {cmbTests.Text} to a valid member of the Tests enum");
        return;
    }

    switch (theTest)
    {
        case Tests.Test1:
            MessageBox.Show("Running Test 1");
            break;

        case Tests.Test2:
            MessageBox.Show("Running Test 2");
            break;

        case Tests.Test3:
            MessageBox.Show("Running Test 3");
            break;

        case Tests.None:

            // Do nothing

            break;

        default:
            MessageBox.Show($"No support for test {theTest}.  Please add");
            return;
    }
}

You can then run tests from a button click handler event:

 private void btnRunTest1_Click(object sender, EventArgs e)
    {
        cmbTests.SelectedItem = Tests.Test1.ToString();
    }

Solution 24 - C#

if you are binding Datasource via Dataset, then you should use "SelectedValue"

cmbCategoryList.SelectedValue = (int)dsLookUp.Tables[0].Select("WHERE PRODUCTCATEGORYID = 1")[0]["ID"];

Solution 25 - C#

You can say comboBox1.Text = comboBox1.Items[0].ToString();

Solution 26 - C#

Please try this way, it works for me:

Combobox1.items[Combobox1.selectedIndex] = "replaced text";

Solution 27 - C#

It should work

Yourcomboboxname.setselecteditem("yourstring");

And if you want to set database string use this

Comboboxname.setselecteditem(ps.get string("databasestring"));

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMay DView Question on Stackoverflow
Solution 1 - C#Norbert B.View Answer on Stackoverflow
Solution 2 - C#Andrew KennanView Answer on Stackoverflow
Solution 3 - C#SpenceView Answer on Stackoverflow
Solution 4 - C#Frederik GheyselsView Answer on Stackoverflow
Solution 5 - C#Muhammad SohailView Answer on Stackoverflow
Solution 6 - C#gaboreView Answer on Stackoverflow
Solution 7 - C#Brian RudolphView Answer on Stackoverflow
Solution 8 - C#daveView Answer on Stackoverflow
Solution 9 - C#BenView Answer on Stackoverflow
Solution 10 - C#ihcarpView Answer on Stackoverflow
Solution 11 - C#Jelle SmitsView Answer on Stackoverflow
Solution 12 - C#Roman Polen.View Answer on Stackoverflow
Solution 13 - C#user53378View Answer on Stackoverflow
Solution 14 - C#MegacanView Answer on Stackoverflow
Solution 15 - C#DeanView Answer on Stackoverflow
Solution 16 - C#Amit BhagatView Answer on Stackoverflow
Solution 17 - C#Jos RoestenbergView Answer on Stackoverflow
Solution 18 - C#user874163View Answer on Stackoverflow
Solution 19 - C#AndersonView Answer on Stackoverflow
Solution 20 - C#user3599362View Answer on Stackoverflow
Solution 21 - C#MonzurView Answer on Stackoverflow
Solution 22 - C#Jaydeep KarenaView Answer on Stackoverflow
Solution 23 - C#Grant JohnsonView Answer on Stackoverflow
Solution 24 - C#AuroraView Answer on Stackoverflow
Solution 25 - C#NishanView Answer on Stackoverflow
Solution 26 - C#HuynhDoView Answer on Stackoverflow
Solution 27 - C#Deepak kumarView Answer on Stackoverflow