2010-11-08 12 views
5

Ist es möglich, jedes Element in einer Combobox mit einer foreach Schleife durchlaufen? Wie würde ich es tun?C# Schleife durch Combobox, wo die Datenquelle eine Datentabelle mit Text ist

Die Sache ist, ich habe eine System.Data.DataRowView da die Combobox an eine DataTable angeschlossen ist. Wie konvertiere ich von diesem zu string?

+0

tun Sie dies, um nach einem bestimmten Wert in der Combobox zu suchen? bezogen auf deine letzte Frage? –

Antwort

15

Im Allgemeinen sieht es wie folgt aus:

foreach(object item in myComboBox.Items) 
{ 
    DataRowView row = item as DataRowView; 

    if(row != null) 
    { 
     string displayValue = row["myColumnName"].ToString(); 

     // do something 
    } 
    else 
     // error: item was not of type DataRowView 
} 

auch http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.items.aspx

+0

danke, wie würde ich den item.text bekommen? –

+0

item.ToString() gibt Ihnen den Wert, der in dem Kombinationsfeld für das bestimmte Element angezeigt wird. – Remus

+0

@i bin ein Mädchen, wenn Sie nach einem Artikel mit bestimmten Text suchen, gibt es eine Methode dafür. –

3
foreach (var item in combobox1.Items) 
{ 
    //do stuff 
} 

sehen Wenn Sie den Inhalt kennen eine Zeichenfolge ist, können Sie

foreach (object item in combobox1.Items) 
{ 
    string text = (item as string); 
    //do stuff with the text 
} 

tun Wenn Sie Verwenden Sie .net 3.5 oder höher, können Sie es ein wenig verkürzen, indem Sie die Cast<T>() Extension-Methode vonverwenden(die durch ObjectCollection, die Art der ComboBox.Items implementiert):

foreach (string text in combobox1.Items.Cast<string>()) 
{ 
    //do stuff with the text 
} 
+0

danke, wie würde ich den item.text bekommen? –

+0

Vielen Dank, die Sache ist, ich habe 'System.Data.DataRowView' dort, weil die Combobox Datentabelle verbunden ist, wie konvertiere ich frmo, dass zu Zeichenkette –

+0

Sie müssten den spezifischen Index der Daten kennen, die angezeigt wird in der Combobox und Call Item [Index]. Entschuldigung, ich kann dir nicht mehr helfen, weil ich keine Erfahrung mit Datenbindung in WinForms habe. – Femaref

0

ja - durch die Elemente Sammlung der Steuer iterieren:

foreach(var item in this.myCombobox.Items) 
{ 
    //your code 
} 
+0

danke, wie würde ich den item.text bekommen? –

+0

es ist im Wesentlichen der item.ToString() Wert – dexter

+0

Vielen Dank, die Sache ist, ich habe 'System.Data.DataRowView' dort, weil die Combobox an Datentabelle angehängt ist, wie konvertiere ich frmo, dass die Zeichenfolge –

0
foreach(ListItem item in this.myCombobox.Items) 
{ 
    //... 
} 
0
foreach(object item in ComboBoxName.Items) 
{ 
    <dosomething> 
} 

Was kann ich sonst noch sagen ? Dies greift sie der Reihe nach auf, aber alle werden Objekte sein. Es liegt an dir, den Typ des Gegenstands zu bestimmen.

1

Ja, es ist nur eine Standardkollektion. ZB:

foreach(object item in myComboBox.Items) 

"Objekt" ist wahrscheinlich (aber nicht unbedingt) eine Zeichenfolge. Wenn Sie wissen, es ist immer ein String, können Sie es ändern könnte:

foreach(string item in myComboBox.Items) 
+1

der zweite Code gewonnen Funktioniert nicht, da myCombobox.Items eine Sammlung von Objekten ist. – Femaref

2

Basierend auf Ihren previous question, es klingt wie Sie durch die Elemente Schleife möchten einen passenden Text-Wert zu finden. Stattdessen können Sie die ComboBox.FindStringExact Methode verwenden, um eine Groß- und Kleinschreibung Suche zu tun, die den Index des ersten Spiels zurückkehren werden es findet, oder -1, wenn sie den Text nicht in Frage findet:

comboBox1.SelectedIndex = comboBox1.FindStringExact("4"); 
0

I Ich habe lange mit diesem Problem gekämpft, da ich oft ComboBox-Steuerelemente verwende, die an eine Liste verschiedener Klassen gebunden sind.

Ich wollte nicht wirklich Feldnamen in meiner Funktion fest codieren, oder habe eine separate SelectItemByValue-Funktion für jeden Typ der Liste <> Klasse, die ich verwenden würde.

Ich kam schließlich mit der folgenden wiederverwendbaren Lösung.

List<EmployeeRecord> m_listOfEmployees = GetListOfEmployees(); 
... 
comboBoxEmployees.DataSource = m_listOfEmployees; 
comboBoxEmployees.DisplayMember = "EmployeeName"; 
comboBoxEmployees.ValueMember = "EmployeeID"; 

Um den ComboBox Artikel mit einer bestimmten Mitarbeiter-ID zu wählen:

int someEmployeeID = 4; 
    ComboBoxHelper.SetComboBoxSelectionByValue<EmployeeRecord>(comboBoxEmployees, someEmployeeID); 

Und hier ist die Funktion, die die Arbeit erledigt.

Halten Sie sich selbst, es ist nicht schön.

public static void SetComboBoxSelectionByValue<T>(ComboBox ctrl, int? value) 
{ 
    // If the ComboBox has no items, disable it (so the user can immediately see there's nothing selectable) 
    ctrl.Enabled = (ctrl.Items.Count > 0); 

    int inx = 0; 
    foreach (T t in ctrl.Items) 
    { 
     foreach (PropertyInfo info in typeof(T).GetProperties()) 
     { 
      if (info.Name == ctrl.ValueMember) 
      { 
       object val = info.GetValue(t, null); 
       if (val.ToString() == value.Value.ToString()) 
       { 
        ctrl.SelectedIndex = inx; 
        return; 
       } 
      } 
     } 
     inx++; 
    } 

    if (ctrl.Items.Count > 0) 
     ctrl.SelectedIndex = 0; 
} 

Beachten Sie, wie Sie die Funktion aufrufen, ist es die Weitergabe Typ von Objekten, die in jedem ComboBoxItem (EmployeeRecord, in diesem Beispiel), zusammen mit einem Zeiger auf Ihre ComboBox gespeichert werden und die Wert des Elements, das als SelectedItem festgelegt werden soll.

ComboBoxHelper.SetComboBoxSelectionByValue<EmployeeRecord>(comboBoxEmployees, someEmployeeID); 

Die Funktionsschritte durch die Elemente in der ComboBox-, findet die „Valuemember“ Feld in diesem Datensatz Stück (EmployeeID, in diesem Beispiel), und vergleicht den Wert des Valuemember mit den gewünschten Wert Parametern.

Ich weiß, ich weiß, es ist nicht schön ist, aber wenn Sie eine Liste an eine ComboBox binden, dann können Sie nicht verwenden DataRowView:

DataRowView row = item as DataRowView; 
string displayValue = row["someColumnName"].ToString(); 

Und wenn Sie eine generische SetComboBoxSelectionByValue Funktion wollen, denen Wenn Sie mit Listen beliebiger Klassen arbeiten, müssen Sie sich an PropertyInfos wenden, um den Wert eines Feldes in Ihrer Klasse zu ermitteln.

Verwandte Themen