Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 对于item=datarow的组合框,如何将ValueMember指向其中一个';s列_Vb.net_Combobox_Valuemember - Fatal编程技术网

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并绑定到它。突出的一点是关于复制数据的部分