-1

我将项目添加到这样的组合框中:

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,但是由于您可以将任何对象添加到组合框项中,直接使用行会很好,只是无法弄清楚如何制作将特定列作为字符串引用。?

4

1 回答 1

0

也许您不能直接使用行对象。我猜想使用 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
于 2016-04-19T09:11:32.477 回答