2014-09-10 11 views
8

ich eine Klasse haben, die mir geben diesen FehlerKann nicht in combobox auf das neue Anzeigeelement binden

public class Item 
{ 
    public string Name; 
    public int Id 

    public Item(string name, int id) 
    { 
     Name = name; 
     Id = id; 
    } 
} 

Hier ist meine Funktion

var lstItems = new List<Item>(); 
while(...) 
{ 
    lstItems.Add(new Item(sAd_Ref, Convert.ToInt32(sAd_ID))); 
} 

comboBox1.DataSource = lstItems; 
comboBox1.ValueMember = "Id"; 
comboBox1.DisplayMember = "Name"; 

Am zweitletzten Zeile Ich erhalte Ausnahme von

Kann nicht an das neue Anzeigeelement gebunden werden.

Antwort

11

Sie sollten Name und Id Eigenschaften machen. Sie können ComboBox nicht an Felder binden.

public string Name { get; set; } 
public int Id { get; set; } 

Es ist auch in docs erklärt:

ValueMember Property: Ruft die Eigenschaft im System.Windows.Forms.ListControl für die Elemente als Ist-Wert zu verwenden.

+0

Es funktionierte dank – user3244721

+0

@Selman Genç Ich weiß, das ein Jahr alt ist - aber Sie sagten, Sie können ComboBox nicht an Felder binden. - Haben Sie eine Referenz dafür, weil mein Code funktioniert? – Ken

8

Ich weiß, dass der Beitrag alt ist, aber die angenommene Antwort ist nicht korrekt. Der Op musste die Reihenfolge der Zuweisung von displayMember, valueMember und Datasource ändern und dann die hinzugefügte Codezeile notieren.

comboBox1.DisplayMember="Name"; 
comboBox1.ValueMember = "Id"; 
comboBox1.DataSource = lstItems; 
comboBox1.BindingContext = this.BindingContext; 
+0

Die Reihenfolge ist nicht wirklich relevant, Sie müssen Eigenschaften verwenden. – Oliver

+0

Dies funktionierte für mich, aber einige Hintergrund oder Doc-Verweis, warum nützlich wäre. –

+2

@RhysJones Ich wünschte, ich hätte eine Dokumentation dafür, ich habe es vor Jahren online gefunden. Es scheint einen Fehler in der Combobox zu geben, der nur in bestimmten Situationen auftritt. Ich denke, es tritt nur auf, wenn die Datenquelle ein List-Type-Source-Objekt und keine Datentabelle ist. Ich weiß, es ist komisch, aber es hat in dieser einzigartigen Situation für mich funktioniert - ich habe mir nicht die Mühe gemacht zu vertiefen, warum es sich so verhielt. Weißt du .... Ich musste mein Projekt erledigen. – Ken

0

In meinem Fall habe ich zu Eigenschaften binden, die das Attribut Browsable mußten false gesetzt.

I.e. der Fehler wegen aufgetreten:

[Browsable(false)] 
public string MyProperty { get; set; } 

Und ich habe es zu lösen, indem einfach das Attribut zu entfernen:

public string MyProperty { get; set; } 
Verwandte Themen