绑定标签和值以组合框的WinForms

绑定标签和值以组合框的WinForms

问题描述:

我有这样的代码绑定标签和值以组合框的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 

我收到

LvName.DataSource = New BindingSource(itemValue, Nothing) 

值的误差不能为空

可以绑定一个字典到数据源通过使用ToList字典()方法。

编辑

一些代码:

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

永远不要试图绑定一个字典到控制的数据源或绑定源。 也许这是不可能的。 你为什么不使用你的所属分类为一个数据源(用于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),而不是一个字典。

btw。一个完整的堆栈跟踪总是有用的。

+0

可以绑定一个字典到数据源通过使用字典的ToList()方法,但在这种情况下,他可能也只是使用名单他发送。 – 2010-09-23 13:01:57

+0

我的类别列表包含其他属性,我只需要ID和名称值@Tony我会尝试出 – 2010-09-23 13:08:43

+0

@Tony请单独发布您的答案,您的建议作品 – 2010-09-23 16:03:42

你需要BindingSource吗?如果不是,您可以直接将ComboBox数据源设置为您的列表。而不是使用字典,你可以使用一些简单的KeyValuePair。
你可以尝试以下方法:

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