我将项目添加到组合框中,如下所示:
For each R as DataRow in MyDataTable.Rows
If R("ID") > 10 then MyCombo.Items.Add(R)
Next
现在我需要将DisplayMember和ValueMember设置为数据行的一列:
MyCombo.ValueMember = R("ID")
MyCombo.DisplayMember = R("Name")
我知道使用"R"没有意义,因为它在这一点上没有提及任何东西,但它只是表明我的意思;-)
ValueMember的文件中写道:表示DataSource属性值的单个属性名称的字符串,或解析为最终数据绑定对象的属性名称的以句点分隔的属性名称的层次结构
我知道我可以将行添加到一个新的数据表中,并将其设置为DataSource,但因为你可以将任何对象添加到组合框项中,所以直接使用行会很好,只是不知道如何将特定列作为字符串进行引用。?
也许您不能直接使用行对象。我想要使用Valuemember,您需要将项对象包装在实现ilist接口的集合中。在旧的MS Access时代,组合框项目具有固有的Display-和ValueMember属性,我在.Net组合框控件中总是错过这一点。我的工作是使用这个类,然后它可以用于所有的组合框:
Class oComboItems
Public items As New List(Of oDVpairs)
Class oDVpairs
Implements IComparable(Of oDVpairs)
Private myDM As String
Private myVM As Object
Sub New(DM As String, VM As Object)
myDM = DM
myVM = VM
End Sub
Public ReadOnly Property DM() As String
Get
Return myDM
End Get
End Property
Public ReadOnly Property VM() As Object
Get
Return myVM
End Get
End Property
Public Function CompareTo(other As oDVpairs) As Integer Implements IComparable(Of oDVpairs).CompareTo
Return Me.myDM.CompareTo(other.myDM)
End Function
End Class
Public Sub AddItems(DisplayMember As String, ValueMemeber As Object)
items.Add(New oDVpairs(DisplayMember, ValueMemeber))
End Sub
Public ReadOnly Property DisplayMember() As String
Get
Return "DM"
End Get
End Property
Public ReadOnly Property ValueMember() As Object
Get
Return "VM"
End Get
End Property
End Class
现在将我的数据行(或任何其他对象)添加到组合框:
Dim CI As New oComboItems
For Each R As DataRow In DT_U.Rows
If R("medlnr") > 10 Then
CI.AddItems(R("name"), R("ID"))
end if
Next
CI.items.Sort()
MyCombo.DataSource = CI.Items
MyCombo.DisplayMember = CI.DisplayMember
MyCombo.ValueMember = CI.ValueMember