下午好,
有没有办法划分不可数,并将所有不同的值绑定到不同的组合框。
您可以在下图中看到: 我得到了10个组合框,而这些组合的输入都来自1个无数。
我可以选择为每个数据库执行操作并浏览整个数据库,然后将它们添加到组合框中:
Dim ts As IEnumerable(Of tblLabel)
For Each itms In ts
CmbDescription.Items.Add(itms.Description)
CmbLabelId.Items.Add(itms.LabelID)
...
Next
但我想知道是否可以将Ienumerable的不同“列”直接链接到相关组合框的数据源。 我正在寻找一个类似的选项:
CmbDescription.DataSource = ts.Description
CmbLabelId.DataSource = ts.LabelId
...
可悲的是,据我所知,这个无数的人不能像这样分开。 另一种解决方法是为所有这些组合框创建所有单独的可用数据,但是代码太多了。
有什么想法吗?
答案 0 :(得分:2)
我认为你原来的做法已经足够了
但是如果你想通过使用DataSource
属性的分隔项集合来填充ComboBox,那么你可以从IEnumerable
CmbLabelId.DataSource =
ts.Select(function(label) label.LabelId).Distinct().ToList()
CmbDescription.DataSource =
ts.Select(function(label) label.Description).Distinct().ToList()
但是在这种方法中,您将循环IEnumerable
的次数与您拥有的ComboBoxes
的次数相同。
这是我的方法,但又想说你原来的方法很简单。
' In this class will be collected all distinct value of all columns
' Create own property for every column which used in the ComboBoxes
' With HashSet only distinct values will be collected (thanks to @Ivan Stoev's comment)
Public Class TblLabelProperties
Public Property LabelId As New HashSet(Of Integer)
Public Property Description As New HashSet(Of String)
' Other properties/columns
End Class
' Populate collections from database
Dim ts As IEnumerable(Of tblLabel)
Dim columnsValues As TblLabelProperties =
ts.Aggregate(New TblLabelProperties(),
Function(lists, label)
lists.LabelId.Add(label.LabelId)
lists.Description.Add(label.Description)
'Add other properties
Return lists
End Function)
' Set DataSources of comboboxes
CmbLabelId.DataSource = columnsValues.LabelId.ToList()
CmbDescription.DataSource = columnsValues.Description.ToList()
答案 1 :(得分:1)
在不将每个数据源放到每个ComboBox
的情况下实现此目的的一种方法是在DataGridView.Columns
中的列名称和组合框名称ComboBox.Name
之间实现映射。
可以使用Dictionary
来完成此操作,因此对于每个列名,您都会映射到特定的ComboBox
。然后,您可以通过foreach或for循环进行填充。
然而,在某些情况下,你真的可能更喜欢每个ComboBox都有自己的数据源