使用<class> VB.NET </class>列表填充ListBox

时间:2014-08-22 14:49:51

标签: vb.net list class listbox

我有一个名为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

列表框填充,但每个条目都是&#34; OptionCodeSearch.Form1 + optionCode&#34;

我无法弄清楚如何使用.ValueMember和.DisplayMember函数来让列表框加载我想要的方式。

2 个答案:

答案 0 :(得分:3)

首先,ValueMemberDisplayMember处理属性: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) ValueMemberDisplayMember用于告诉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