绑定标签和值以组合框的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。一个完整的堆栈跟踪总是有用的。
答
你需要BindingSource吗?如果不是,您可以直接将ComboBox数据源设置为您的列表。而不是使用字典,你可以使用一些简单的KeyValuePair。
你可以尝试以下方法:
KeyValuePair[] pairs = new KeyValuePair[0];
ComboBox box = new ComboBox();
box.DisplayMember = "Value";
box.ValueMember = "Key";
box.DataSource = pairs;
可以绑定一个字典到数据源通过使用字典的ToList()方法,但在这种情况下,他可能也只是使用名单他发送。 – 2010-09-23 13:01:57
我的类别列表包含其他属性,我只需要ID和名称值@Tony我会尝试出 – 2010-09-23 13:08:43
@Tony请单独发布您的答案,您的建议作品 – 2010-09-23 16:03:42