Ich habe eine Zeichenfolge "test1" und meine ComboBox enthält test1
, test2
und test3
. Wie setze ich das ausgewählte Element auf "test1"? Wie stelle ich meine Zeichenfolge einem der Elemente der ComboBox zu?
Ich habe an die Zeile unten gedacht, aber das funktioniert nicht.
comboBox1.SelectedText = "test1";
Das sollte den Trick tun:
Combox1.SelectedIndex = Combox1.FindStringExact("test1")
Haben Sie die Eigenschaft Text ausprobiert? Für mich geht das.
ComboBox1.Text = "test1";
Die SelectedText-Eigenschaft bezieht sich auf den ausgewählten Teil des bearbeitbaren Textes im Textfeldteil des Kombinationsfelds.
Wenn Sie davon ausgehen, dass Ihre Combobox keine Datenbank enthält, müssen Sie den Index des Objekts in der Auflistung "items" Ihres Formulars suchen und dann die Eigenschaft "selectedindex" auf den entsprechenden Index setzen.
comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
Beachten Sie, dass die Funktion IndexOf eine Argumentexception auslösen kann, wenn das Element nicht gefunden wird.
Wenn die Elemente in Ihrer ComboBox Zeichenfolgen sind, können Sie Folgendes versuchen:
comboBox1.SelectedItem = "test1";
Bei mir funktionierte das nur:
foreach (ComboBoxItem cbi in someComboBox.Items)
{
if (cbi.Content as String == "sometextIntheComboBox")
{
someComboBox.SelectedItem = cbi;
break;
}
}
MOD: und wenn Sie Ihre eigenen Objekte als Elemente in der Combobox eingerichtet haben, ersetzen Sie das ComboBoxItem durch eines dieser Objekte:
foreach (Debitor d in debitorCombo.Items)
{
if (d.Name == "Chuck Norris")
{
debitorCombo.SelectedItem = d;
break;
}
}
SelectedText dient dazu, den tatsächlichen Text im String-Editor für das ausgewählte Element in der Combobox als dokumentiert hier abzurufen. Dies kann nicht bearbeitet werden, wenn Sie Folgendes einstellen:
comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
Benutzen:
comboBox1.SelectedItem = "test1";
oder:
comboBox1.SelectedIndex = comboBox1.Items.IndexOf("test1");
Ich habe eine Erweiterungsmethode verwendet:
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;
}
}
}
Dann verbrauchen Sie einfach die Methode:
ddl.SelectItemByValue(value);
comboBox1.SelectedItem.Text = "test1";
Angenommen, test1, test2, test3 gehören zur comboBox1-Auflistung, wenn folgende Anweisung funktioniert.
comboBox1.SelectedIndex = 0;
Diese Lösung basiert auf MSDN , wobei einige Änderungen vorgenommen wurden.
Er findet genau oder PART von string und setzt es.
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;
}
Ich hoffe ich habe geholfen!
Ich habe meine ComboBox mit einer DataTable aus einer Datenbank gefüllt. Dann habe ich das DisplayMember und das ValueMember eingestellt. Und ich verwende diesen Code, um das ausgewählte Element festzulegen.
foreach (DataRowView Row in ComboBox1.Items)
{
if (Row["ColumnName"].ToString() == "Value") ComboBox1.SelectedItem = Row;
}
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");
Versuchen Sie dies in Windows Form.
Ich habe KeyValuePair für ComboBox-Datenbindungen verwendet und wollte Artikel anhand von value finden, damit dies in meinem Fall funktioniert
comboBox.SelectedItem = comboBox.Items.Cast<KeyValuePair<string,string>>().First(item=> item.Value == "value to match");
Wenn ich jedoch einen solchen Code als Code-Reviewer sehe, würde ich empfehlen, den gesamten Methodenalgorithmus zu überdenken.
Sie haben diese Eigenschaft nicht in der ComboBox. Sie haben SelectedItem oder SelectedIndex. Wenn Sie über die Objekte verfügen, mit denen Sie das Kombinationsfeld gefüllt haben, können Sie SelectedItem verwenden.
Wenn nicht, können Sie die Auflistung der Elemente (Eigenschaftselemente) abrufen und iterieren, bis Sie den gewünschten Wert erhalten und mit den anderen Eigenschaften verwenden.
ich hoffe es hilft.
_cmbTemplates.SelectedText = "test1"
oder vielleicht
_cmbTemplates.SelectedItem= _cmbTemplates.Items.Equals("test1");
Alle Methoden, Tricks und Codezeilen, die das ComboBox-Element festlegen, funktionieren erst, wenn die ComboBox ein übergeordnetes Element hat.
Ich habe eine Funktion erstellt, die den Index des Werts zurückgibt
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;
}
das funktioniert für mich .....
comboBox.DataSource.To<DataTable>().Select(" valueMember = '" + valueToBeSelected + "'")[0]["DislplayMember"];
ListItem li = DropDownList.Items.FindByValue("13001");
DropDownList.SelectedIndex = ddlCostCenter.Items.IndexOf(li);
Für Ihren Fall können Sie verwenden
DropDownList.Items.FindByText("Text");
combo.Items.FindByValue("1").Selected = true;
Suchen Sie mySecondObject (vom Typ MyObject) in der Combobox (mit einer Liste von MyObjects) und wählen Sie das Element aus:
foreach (MyObject item in comboBox.Items)
{
if (item.NameOrID == mySecondObject.NameOrID)
{
comboBox.SelectedItem = item;
break;
}
}