2010-09-23 6 views
2

J'ai ce codeReliure Étiquette et valeur à ComboBox Winforms

Public Sub FillCategoryCombobox(ByVal categoryList As List(Of tblCategory), ByVal LvName As ComboBox) 
    LvName.Items.Clear() 
    Dim itemValue = New Dictionary(Of Integer, String)() 
    For Each category As tblCategory In categoryList 
     itemValue.Add(category.CategoryID, category.CategoryName) 
    Next category 
    LvName.DataSource = New BindingSource(itemValue, Nothing) 
    LvName.DisplayMember = "Value" 
    LvName.ValueMember = "Key" 
End Sub 

Je reçois une erreur sur

LvName.DataSource = New BindingSource(itemValue, Nothing) 

valeur ne peut être nulle

Répondre

2

Vous pouvez lier un dictionnaire à une source de données en utilisant la méthode ToList() du dictionnaire.

Modifier

Certains code:

LvName.DataSource = itemValue.ToList() 
LvName.DisplayMember = "Value" 
LvName.ValueMember = "Key" 
1

Ne jamais essayé de lier un dictionnaire à un datasource de contrôle ou bindingsource. Peut-être que ce n'est pas possible. Pourquoi utilisez-vous pas votre CatégorieListe comme source de données (pour BindingSource ou directement)

combo1.DataSource = categoryList 
combo1.DisplayMember = "CategoryName" 
combo1.ValueMember = "CategoryID" 

ou si vous avez besoin pour maintenir la position:

dim bs as new BindingSource(categoryList, nothing) 
combo1.DataSource = bs 
combo1.DisplayMember = "CategoryName" 
combo1.ValueMember = "CategoryID"  

ou créer un List(of category) au lieu d'un dictionnaire .

btw. une trace de pile complète est toujours utile.

+0

Vous pouvez lier un dictionnaire à une source de données en utilisant la méthode ToList() du dictionnaire, mais dans ce cas il pourrait tout aussi bien utiliser la liste il envoie. –

+0

Ma liste de catégories contient d'autres propriétés et j'ai juste besoin de l'ID et la valeur du nom @Tony Je vais essayer cela –

+0

@Tony Veuillez poster votre réponse dans un article séparé, votre suggestion fonctionne –

0

Avez-vous besoin de BindingSource? Sinon, vous pouvez définir la source de données ComboBox directement dans votre liste. Et au lieu d'utiliser un dictionnaire, vous pouvez utiliser quelque chose de plus simple comme un KeyValuePair.
Pouvez-vous essayer ce qui suit:

KeyValuePair[] pairs = new KeyValuePair[0]; 
ComboBox box = new ComboBox(); 
box.DisplayMember = "Value"; 
box.ValueMember = "Key"; 
box.DataSource = pairs;