我有这段代码
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)
值不能为空
答案 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;