Метка привязки и значение для ComboBox Winforms - PullRequest
2 голосов
/ 23 сентября 2010

У меня есть этот код

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

Я получаю сообщение об ошибке

LvName.DataSource = New BindingSource(itemValue, Nothing)

Значение не может быть нулевым

Ответы [ 3 ]

2 голосов
/ 23 сентября 2010

Вы можете привязать словарь к источнику данных, используя метод словаря ToList ().

Редактировать

Некий код:

LvName.DataSource = itemValue.ToList()
LvName.DisplayMember = "Value"
LvName.ValueMember = "Key"
1 голос
/ 23 сентября 2010

Никогда не пытался привязать словарь к источнику данных элемента управления или источнику привязки. Может быть, это невозможно. Почему бы вам не использовать свой CategoryList в качестве источника данных (для BindingSource или напрямую)

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

или если вам нужно сохранить позицию:

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

или создайте List(of category) вместо словаря.

кстати. трассировка полного стека всегда полезна.

0 голосов
/ 23 сентября 2010

Вам нужен BindingSource?Если нет, вы можете установить ComboBox DataSource в свой список напрямую.И вместо использования словаря вы можете использовать нечто более простое, например KeyValuePair.
Можете ли вы попробовать следующее:

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

...