2014-09-10 8 views
8

ho una classe che mi danno questo errorenon può legarsi al nuovo membro del display in combobox

public class Item 
{ 
    public string Name; 
    public int Id 

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

Ecco la mia funzione

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"; 

Sulla penultima riga sto ottenendo eccezione di

Impossibile collegarsi al nuovo membro del display.

risposta

11

È necessario effettuare le proprietà Name e Id. Non è possibile associare ComboBox ai campi.

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

è anche affermato in docs:

ValueMember Property: Ottiene o imposta la proprietà da utilizzare come valore effettivo per le voci del System.Windows.Forms.ListControl.

+0

ha funzionato grazie – user3244721

+0

@Selman Genç So che questo è un anno - ma è detto che si può 'associare ComboBox ai campi. - hai un riferimento per questo perché il mio codice funziona. – Ken

8

So che il post è vecchio ma la risposta accettata non è corretta. L'Operazione necessaria per modificare l'ordine di assegnazione di displayMember, valueMember e Datasource e quindi prendere nota della riga di codice aggiunta.

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

l'ordine non è veramente rilevante, è necessario utilizzare le proprietà. – Oliver

+0

Questo ha funzionato per me, ma qualche riferimento in background o documento sul perché sarebbe utile. –

+2

@RhysJones Vorrei avere la documentazione per questo, l'ho trovato online anni fa. Sembra che ci sia un bug nel Combobox e si verifica solo in alcune situazioni. Penso che si verifica solo quando l'origine dati è un oggetto sorgente di tipo elenco e non databile. So che è strano ma ha funzionato per me in questa situazione unica - non mi sono preoccupato di approfondire il motivo per cui si è comportato in quel modo. Sai ... avevo bisogno di fare il mio progetto. – Ken

0

Nel mio caso, ho fatto associazione con le proprietà che hanno avuto l'attributo Browsable impostato false.

I.e. l'errore si è verificato a causa di:

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

E mi ha risolto rimuovendo semplicemente l'attributo:

public string MyProperty { get; set; }