将标签和值绑定到ComboBox Winforms

时间:2010-09-23 12:46:55

标签: .net vb.net combobox null

我有这段代码

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 个答案:

答案 0 :(得分:2)

您可以使用字典的ToList()方法将字典绑定到数据源。

修改

一些代码:

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

答案 1 :(得分:1)

从未尝试将字典绑定到控件的数据源或bindingsource。 也许那是不可能的。 为什么不将categoryList用作DataSource(对于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)而不是字典。

顺便说一句。完整的堆栈跟踪总是有用的。

答案 2 :(得分:0)

你需要BindingSource吗?如果没有,您可以直接将ComboBox DataSource设置为您的列表。而不是使用字典,你可以使用像KeyValuePair更简单的东西 你能尝试以下方法:

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