我需要能够在multiselect框中显示一个值,但存储另一个值。我正在使用的API向我返回了商品的GUID及其名称。所以我想向用户显示名称并使用GUID作为ID或键,因为如果我选择或取消选择它而不是文本,我需要向包括GUID的api发送一个调用。 我还没有找到一种为multiselectbox分配键和文本的方法,这就是我目前创建项目的方式
clbBucketList.Items.Add(BucketList(Index).text, False)
帮助中显示对象,但不确定是否可以创建键和文本对象。如果通用MS控件不支持此功能,那么是否有3方控件可以做到这一点?
答案 0 :(得分:1)
您应该定义一个具有GUID和名称属性的类型,并创建该类型实例的列表。然后,您可以将该列表绑定到CheckedListBox
并设置DisplayMember
,以便显示包含名称的属性。然后,您可以将CheckedItems
集合中的项目强制转换为您的类型,并从其他属性获取GUID值。
项目类型:
Public Class Bucket
Public Property Guid As Guid
Public Property Name As String
End Class
绑定:
Dim buckets As New List(Of Bucket)
For Each item In BucketList
Dim bucket As New Bucket With {.Guid = GetGuid(item),
.Name = GetName(item)}
buckets.Add(bucket)
Next
clbBucketList.DataSource = buckets
clbBucketList.DisplayMember = "Name"
通常我会说您应该将DataSource
放在最后,但是以我的经验,这会导致CheckedListBox
出现问题。
数据检索:
Dim guids As New List(Of Guid)
For Each bucket As Bucket In clbBucketList.CheckedItems
guids.Add(bucket.Guid)
Next