it-swarm.com.de

Festlegen des ausgewählten Elements der ComboBox in C # Windows Forms

Ich versuche, das ausgewählte Element von comboBox beim Klickereignis von DataGrid festzulegen, konnte es jedoch nicht. Ich habe auf verschiedene Arten gegoogelt und versucht, aber ohne Erfolg.

Bei mir funktioniert SelectedIndex, aber ich konnte den Index der Elemente in der ComboBox nicht finden, sodass ich das Element nicht auswählen konnte.

Nicht funktionierender Code:

for (int i = 0; i < cmbVendor.Items.Count; i++)

    if (cmbVendor.Items[i].ToString() == Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor")))
    {
        cmbVendor.SelectedIndex = i;
        break;
    }
6
Azhar

Sie können Ihren Artikelindex über die .Items.IndexOf()-Methode abrufen. Versuche dies:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf(gridView1.GetFocusedRowCellValue("vVendor"));

Sie müssen nicht iterieren.

Weitere Informationen finden Sie in Stack Overflow questionWie stelle ich das ausgewählte Element in einer ComboBox mit C # auf meine Zeichenfolge ein?.

14
Kamil

Folgendes funktioniert für mich perfekt. Übergeben Sie einen beliebigen Wert oder Text, der in der Combobox verfügbar ist.

comboBox1.SelectedIndex = comboBox1.FindString(<combobox value OR Text in string formate>);
11
ashish Patel

Sie haben es in Ihrem Fall:

cmbVendor.SelectedItem = cmbVendor.Items[i];
4
Steve

Endlich fand ich es heraus. Es ist:

cmbVendor.Text = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));

Die SelectedText-Eigenschaft bezieht sich auf den ausgewählten Teil des bearbeitbaren Textes im Textfeld-Teil des Kombinationsfelds.

2
Azhar

Wenn gridView1.GetFocusedRowCellValue("vVendor") tatsächlich wie erwartet funktioniert, sollte der folgende Code das Problem beheben.

string selected = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));
foreach ( var item in cmbVendor.Items )
{
    if (string.Compare(item.ToString(), selected, StringComparison.OrdinalIgnoreCase) == 0)
    {
        cmbVendor.SelectedItem = item;
        break;
    }
}

Der ursprüngliche Code hatte mehrere Aufrufe von gridView1.GetFocusedRowCellValue("vVendor"), während Sie nur einen benötigen.

Die vorgeschlagene "comboBox1.Items.IndexOf (") geht zu viel von dem Inhalt von cmbVendor.Items aus.

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

Versuchen Sie dies, dies funktioniert in C # Windows-Anwendung

0
Muhammad Sohail

Wenn Sie die ValueMember-Eigenschaft für das ComboBox-Steuerelement festgelegt haben, können Sie den Wert einfach der SelectedValue-Eigenschaft des ComboBox-Steuerelements zuweisen. Sie müssen den Index nicht explizit finden. Hier ist ein Beispiel:

public class Vendor{
    public int VendorId {get; set;}
    public string VendorName {get; set;}
}

// Inside your function
   var comboboxData = new List<Vendor>(){
       new Vendor(){ vendorId = 1, vendorName = "Vendor1" },
       new Vendor(){ vendorId = 2, vendorName = "Vendor2" }
   }

   cmbVendor.DataSource = comboboxData;
   cmbVendor.DisplayMember = "VendorName";
   cmbVendor.ValueMember = "ValueId";

// Now, to change your selected index to the ComboBox item with ValueId of 2, you can simply do:
   cmbVendor.SelectedValue = 2;
0
chaosifier

Ich hatte ein ähnliches Problem und habe es mit Hilfe der anderen Antworten hier zum Teil gelöst. Erstens war mein besonderes Problem das 

combobox1.SelectedItem = myItem;

funktionierte nicht wie erwartet. Die Hauptursache war, dass myItem ein Objekt aus einer Gruppe war, das praktisch dieselbe Liste wie die Elemente in der Combobox war, aber tatsächlich eine Kopie dieser Elemente war. MyItem war also identisch mit einem gültigen Eintrag, aber selbst war es kein gültiges Objekt aus dem Combobox1-Container.

Die Lösung bestand darin, SelectedIndex anstelle von SelectedItem wie folgt zu verwenden:

combobox1.SelectedIndex = get_combobox_index(myItem);

woher 

    private int get_combobox_index(ItemClass myItem)
    {
        int i = 0;
        var lst = combobox1.Items.Cast<ItemClass >();
        foreach (var s in lst)
        {
            if (s.Id == myItem.Id)
                return i;

            i++;
        }
        return 0;
    }
0
AJameson56