web-dev-qa-db-fra.com

Comment définir l'élément sélectionné dans une comboBox pour qu'il corresponde à ma chaîne en utilisant C #?

J'ai une chaîne "test1" et ma comboBox contient test1, test2 et test3. Comment définir l'élément sélectionné sur "test1"? Comment faire correspondre ma chaîne à l'un des éléments de la comboBox?

Je pensais à la ligne ci-dessous, mais cela ne fonctionne pas.

comboBox1.SelectedText = "test1"; 
167
May D

Cela devrait faire l'affaire:

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

Avez-vous essayé le Texte propriété? Ça marche pour moi. 

ComboBox1.Text = "test1";

La propriété SelectedText concerne la partie sélectionnée du texte modifiable dans la partie zone de texte de la zone de liste déroulante.

200
Andrew Kennan

En supposant que votre liste déroulante ne soit pas databound, vous devez rechercher l'index de l'objet dans la collection "items" de votre formulaire, puis définir la propriété "selectedindex" sur l'index approprié.

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

Gardez à l'esprit que la fonction IndexOf peut générer une exception argument si l'élément n'est pas trouvé.

46
Spence

Si les éléments de votre ComboBox sont des chaînes, vous pouvez essayer:

comboBox1.SelectedItem = "test1";
34
Frederik Gheysels

Pour moi, cela ne fonctionnait que:

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

MOD: et si vous avez vos propres objets en tant qu'éléments configurés dans la liste déroulante, remplacez le ComboBoxItem par l'un d'eux, comme suit:

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

SelectedText consiste à obtenir ou définir le texte actuel dans l'éditeur de chaîne pour l'élément sélectionné dans la liste déroulante, comme indiqué dans la documentation ici . Cela devient inédit si vous définissez:

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

Utilisation:

comboBox1.SelectedItem = "test1";

ou:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
7
Brian Rudolph

J'ai utilisé une méthode d'extension:

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

Ensuite, utilisez simplement la méthode:

ddl.SelectItemByValue(value);
7
dave
comboBox1.SelectedItem.Text = "test1";
5
Ben

Supposons que test1, test2, test3 appartiennent à la déclaration suivante de la collection comboBox1. 

comboBox1.SelectedIndex = 0; 
4
ihcarp

Cette solution est basée sur MSDN avec quelques modifications apportées.

  • Il trouve exact ou LA PARTIE de la chaîne et la définit.

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

J'espère que j'ai aidé!

4
Roman Polen.

J'ai rempli ma ComboBox avec een DataTable à partir d'une base de données. Ensuite, j'ai défini DisplayMember et ValueMember. Et j'utilise ce code pour définir l'élément sélectionné.

foreach (DataRowView Row in ComboBox1.Items)
{
    if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}
3
Jelle Smits
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");

Essayez ceci dans Windows Form.

3
Muhammad Sohail

J'ai utilisé KeyValuePair pour la liaison de données ComboBox et je souhaitais trouver l'élément par value et cela a donc fonctionné dans mon cas:

comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");
1
Amit Bhagat
  • Énumérer des ListItems dans une liste déroulante
  • Obtenez les égaux listindex set combobox 
  • Définissez listindex sur celui trouvé.

Mais si je considère un tel code comme un réviseur de code, je recommanderais de reconsidérer tout l'algorithme de la méthode.

1
user53378

Vous n'avez pas cette propriété dans la ComboBox. Vous avez SelectedItem ou SelectedIndex. Si vous avez les objets que vous avez utilisés pour remplir la liste déroulante, vous pouvez utiliser SelectedItem.

Si ce n'est pas le cas, vous pouvez obtenir la collection d'éléments (propriétés de la propriété) et effectuer une itération jusqu'à l'obtention de la valeur souhaitée et l'utiliser avec les autres propriétés.

j'espère que ça aide.

1
Megacan
_cmbTemplates.SelectedText = "test1"

ou peut-être

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

Toutes les méthodes, astuces et lignes de code définissant un élément ComboBox ne fonctionneront pas tant que ComboBox n'aura pas de parent.

0
user3599362

J'ai créé une fonction qui renverra l'index de la valeur

        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;
        }
0
Monzur

ça marche pour moi .....

comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
0
Jaydeep Karena
  ListItem li = DropDownList.Items.FindByValue("13001");
  DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);

Pour votre cas, vous pouvez utiliser 

DropDownList.Items.FindByText("Text");
0
user874163
combo.Items.FindByValue("1").Selected = true;
0
Anderson

Recherchez mySecondObject (de type MyObject) dans une liste déroulante (contenant une liste de MyObjects) et sélectionnez l'élément:

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