我正在处理一个返回MySqlCommand
等查询结果的代码,但一切正常,但我尝试做的是将结果插入ComboBox
。实现这一目标的方法如下:
GetAvailableCategories
函数Items
以插入ComboBox 练习示例:
1,3。触发功能的事件
Private Sub Service_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each categoria In Categories.GetAvailableCategories()
service_category.Items.Add(categoria)
Next
End Sub
GetAvailableCategories
功能
Dim dic As New Dictionary(Of Integer, String)
For Each row In table.Rows
dic.Add(row(0), row(1))
Next
Return dic
如何在1,3
点看到我调用返回结果的函数。我想要做的是将row(0)
作为项目的值插入,将row(1)
作为项目名称插入。但实际上我在ComboBox
:
[1, Hair cut]
我也无法访问迭代中当前项目的特定位置。也许字典不是这个操作的好选择?
很抱歉,这个问题可能很愚蠢,但是我已经很长时间没有在vb.net中编程了,现在我需要稍微刷一点。
更新
我已经明白我可以为.key
的{{1}}分配值访问权限,因此如果我这样做,我想要实现的结果是正确的:
dictionary
现在的问题是:如何在不创建任何其他新类的情况下分配当前项的值?例如:
cateogoria.key (return the id of record taken from the db)
categoria.value (is the item name that'll display in the ComboBox)
但我不能这样做,任何想法?
答案 0 :(得分:1)
作为数据源的List
听起来就像你真正追求的那样。依赖于不同阵列中的相对索引有点不稳定。关于这些是什么并不是很多,但课程会将相关信息保存在一起:
Public Class Service
Public Property Name As String
Public Property Category As String
Public Property Id As Int32
End Class
这将把不同的信息保存在一起。使用它们来存储从数据库中读取的信息,并使用List来存储所有这些信息:\
Private Services As New List(of Service)
...
For Each row In table.Rows
Dim s As New Service
s.Name = row(0).ToString() '???
s.Category =...
s.Id = ...
Services.Add(s) ' add this item to list
Next
最后,将List绑定到CBO:
myCbo.DataSource = Services
myCbo.DisplayMember = "Name" ' what to show in cbo
myCbo.ValueMember = "Id" ' what to use for SelectedValue
我真的不知道你想要展示什么或者db字段读取的是什么,所以我猜。但更重要的是,Class会将不同的信息位保持在一起,而不是数组。 List可以是DataSource,因此您甚至不必直接填充CBO。 List也可以使用linq进行排序,搜索,过滤等等。
当用户选择某个内容时,myCbo.SelectedItem
应该 该项目(虽然需要投放),或者您可以使用SelectedIndex
在列表中找到它:
thisOne = Services(myCbo.SelectedIndex)
在项目/服务类中覆盖ToString
通常也是个好主意。这将确定DisplayMember
映射不可用时显示的内容。如果没有此项,WindowsApp2.Service
可能会显示您的商品:
Public Overrides ToString() As String
Return String.Format("{0} ({1})", Name, Price)
End Sub
这会显示类似
的内容理发($ 12.30)