我有一个名为optionCode的类:
Class optionCode
Public description As String
Public optCode As String
End Class
我有一个查询返回一个这个optionCode类的列表:
Dim _SelectActiveOptionCodes2 = (From _OptCodes In _EntityModel.tblOptionCodes
Where _OptCodes.fdStatus = "A"
Select New optionCode With {.description = _OptCodes.fdDescription,
.optCode = _OptCodes.fdOptionCode}).ToList()
我想使用此列表填充列表框,其中描述是显示字段,选项代码是值字段。
使用时:
sortableOptionCodes = _SelectActiveOptionCodes2
sortedOptionCodes = _SelectActiveOptionCodes2
OptionCodeListBox.DataSource = sortedOptionCodes
列表框填充,但每个条目都是" OptionCodeSearch.Form1 + optionCode"
我无法弄清楚如何使用.ValueMember和.DisplayMember函数来让列表框加载我想要的方式。
答案 0 :(得分:3)
首先,ValueMember
和DisplayMember
处理属性:Gets or sets the property to use as the actual value for the items in the System.Windows.Forms.ListControl.
因此,您的类应该使用属性而不是字段(有些情况下,字段的处理/处理方式与属性不同)。
使用这些类时,最好覆盖ToString,以便指定要显示的默认文本而不是类型(OptionCodeSearch.Form1+optionCode
):
Class optionCode
Public PROPERTY description As String
Public PROPERTY optCode As String
Public Overrides Function ToString() As String
Return Description ' ????
End Function
End Class
ValueMember
通常是一个数字,但是一旦你有List(of optionCode)
ValueMember
和DisplayMember
用于告诉ListBox
属性名称:
OptionCodeListBox.DisplayMember = "description"
OptionCodeListBox.ValueMember = "optCode"
并非一无是处,但像这样的原语可以被制作成一个通用的 - 几乎任何地方的类:
Public Class Element(Of T)
Public Property Name As String
Public Property Value As T
Friend Sub New(n As String, v As T)
Name = n
Value = v
End Sub
Public Overrides Function ToString() As String
Return Name
End Function
End Class
Of T
允许您在构建时定义Value数据类型:
Dim el As New Element(Of Integer)(textName, intValue)
您的列表将是:
Dim myList As New List(Of Element(Of Integer))
迭代列表有点麻烦,但VS / Intellisense提供了提示:
For Each El As Element(of Integer) in myList(Of Element(Of Integer))
如果您在项目中使用其中一个,可以将其子类化:
Public Class optCode
Inherits Element(Of String)
现在,整个Element(Of String)
部分内置于您的新optCode
课程中,便于输入,使用和记忆。
这些的值是你可以使用相同的类来获取字符串,日期时间,整数,小数等的Name-Value对的集合,而无需在每次需要类似的东西时编写新类。
答案 1 :(得分:0)
编辑:此答案适用于网络表单控件。请参阅Plutonix的窗体控件的答案。
我相信您要找的是DataTextField
的{{1}}和DataValueField
属性。
ListBox