Vb.net 对于item=datarow的组合框,如何将ValueMember指向其中一个';s列
我将项目添加到组合框中,如下所示:Vb.net 对于item=datarow的组合框,如何将ValueMember指向其中一个';s列,vb.net,combobox,valuemember,Vb.net,Combobox,Valuemember,我将项目添加到组合框中,如下所示: For each R as DataRow in MyDataTable.Rows If R("ID") > 10 then MyCombo.Items.Add(R) Next 现在我需要将DisplayMember和ValueMember设置为datarow的一列: MyCombo.ValueMember = R("ID") MyCombo.DisplayMember = R("Name") 我知道使用“R”没有意义,因为在这一点上它没有提及任
For each R as DataRow in MyDataTable.Rows
If R("ID") > 10 then MyCombo.Items.Add(R)
Next
现在我需要将DisplayMember和ValueMember设置为datarow的一列:
MyCombo.ValueMember = R("ID")
MyCombo.DisplayMember = R("Name")
我知道使用“R”没有意义,因为在这一点上它没有提及任何东西,但它只是表明我的意思;-)
ValueMember的文档说明:
表示数据源属性值的单个属性名的字符串,或解析为最终数据绑定对象的属性名的句点分隔属性名的层次结构
我知道我可以将行添加到新的datatable中,并将其设置为数据源,但由于您可以将任何对象添加到combobox项中,直接使用行是很好的,只是不知道如何将特定列作为字符串进行引用。?也许您不能直接使用行对象。我猜要使用Valuemember,您需要将item对象包装在实现ilist接口的集合中。 在旧的MS Access days组合框中,项目具有本机显示和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
无需将每一行复制到items集合中
myCBO.DataSource=MyDataTable
我知道……但我只需要一些行,而不是全部。在我的示例中,id>10。我还写了“我知道我可以将行添加到新的数据表中,并将其设置到数据源”,这意味着我知道使用DT作为数据源;-)然后使用DataVie、RowFilter并绑定到它。突出的一点是关于复制数据的部分