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";
Cela devrait faire l'affaire:
Combox1.SelectedIndex = Combox1.FindStringExact("test1")
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.
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é.
Si les éléments de votre ComboBox sont des chaînes, vous pouvez essayer:
comboBox1.SelectedItem = "test1";
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;
}
}
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");
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);
comboBox1.SelectedItem.Text = "test1";
Supposons que test1, test2, test3 appartiennent à la déclaration suivante de la collection comboBox1.
comboBox1.SelectedIndex = 0;
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é!
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;
}
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");
Essayez ceci dans Windows Form.
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");
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.
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.
_cmbTemplates.SelectedText = "test1"
ou peut-être
_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
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.
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;
}
ça marche pour moi .....
comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
ListItem li = DropDownList.Items.FindByValue("13001");
DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);
Pour votre cas, vous pouvez utiliser
DropDownList.Items.FindByText("Text");
combo.Items.FindByValue("1").Selected = true;
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;
}
}