.net 将标签和值绑定到ComboBox Winforms

.net 将标签和值绑定到ComboBox Winforms,.net,vb.net,combobox,null,.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

我有这个密码

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)

值不能为null

从未尝试将字典绑定到控件的数据源或bindingsource。 也许那是不可能的。 为什么不将categoryList用作数据源(对于BindingSource或直接使用)

或者,如果您需要维持该职位:

dim bs as new BindingSource(categoryList, nothing)
combo1.DataSource = bs
combo1.DisplayMember = "CategoryName"
combo1.ValueMember = "CategoryID"    
或者创建一个
列表(类别)
,而不是字典


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

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

KeyValuePair[] pairs = new KeyValuePair[0];
ComboBox box = new ComboBox();
box.DisplayMember = "Value";
box.ValueMember = "Key";
box.DataSource = pairs;
KeyValuePair[]对=新的KeyValuePair[0];
ComboBox=新的ComboBox();
box.DisplayMember=“值”;
box.ValueMember=“Key”;
box.DataSource=pairs;

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

编辑

一些代码:

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

您可以使用字典的ToList()方法将字典绑定到数据源,但在这种情况下,他也可以使用他发送的列表。我的类别列表包含其他属性,我只需要ID和名称值@Tony,我会尝试out@Tony请在单独的帖子中发布您的答案,您的建议有效
LvName.DataSource = itemValue.ToList()
LvName.DisplayMember = "Value"
LvName.ValueMember = "Key"