Vb.net 组合框项目列表SelectedValue

Vb.net 组合框项目列表SelectedValue,vb.net,combobox,datasource,list.selectedvalue,Vb.net,Combobox,Datasource,List.selectedvalue,VB.NET(2010) 我正在尝试创建一个带有值和显示项的组合框。下面是相关的代码位。我最初尝试使用具有完全相同结果的datatable: Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load Try cmbFromGroup.Items.Clear() ItemList.Clear() Item = New SelectionIte

VB.NET(2010)

我正在尝试创建一个带有值和显示项的组合框。下面是相关的代码位。我最初尝试使用具有完全相同结果的datatable:

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    Try
        cmbFromGroup.Items.Clear()
        ItemList.Clear()
        Item = New SelectionItem(KeyValue, DisplayValue)
        'Link combobox and Item
        ItemList.Add(Item)
        cmbFromGroup.DataSource = ItemList
        cmbFromGroup.DisplayMember = "Display"
        cmbFromGroup.ValueMember = "Key"
    Catch ex As Exception
        Stop
    End Try
End Sub

Private Sub cmbFromGroup_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbFromGroup.SelectedIndexChanged
    Try
        cmbFromMP3.Items.Clear()
        Dim x As String = cmbFromGroup.SelectedValue
        ' <snip>
        cmbFromMP3.SelectedIndex = 0
    Catch ex As Exception
        Stop
    End Try
End Sub

Public Interface ISelectionItem
    Property Key As String
    Property Display As String
End Interface

Public Class SelectionItem
    Implements ISelectionItem

    Public Sub New(ByVal vKey As String, ByVal vDisplay As String)
        _Key = vKey
        _Display = vDisplay
    End Sub

    Public Property Key As String Implements ISelectionItem.Key
    Public Property Display As String Implements ISelectionItem.Display

End Class
Private Sub Form1\u Load(发送方作为对象,e作为System.EventArgs)处理Me.Load
尝试
cmbFromGroup.Items.Clear()
ItemList.Clear()
Item=新建SelectionItem(键值、显示值)
'链接组合框和项目
ItemList.Add(项目)
cmbFromGroup.DataSource=项目列表
cmbFromGroup.DisplayMember=“显示”
cmbFromGroup.ValueMember=“键”
特例
停止
结束尝试
端接头
私有子cmbFromGroup\u SelectedIndexChanged(发件人作为System.Object,e作为System.EventArgs)处理cmbFromGroup.SelectedIndexChanged
尝试
cmbFromMP3.Items.Clear()
尺寸x为字符串=cmbFromGroup.SelectedValue
' 
cmbFromMP3.SelectedIndex=0
特例
停止
结束尝试
端接头
公共接口选择项
属性键作为字符串
属性显示为字符串
端接口
公共类选择项
实现ISelectionItem
Public Sub New(ByVal vKey作为字符串,ByVal vDisplay作为字符串)
_Key=vKey
_显示=vDisplay
端接头
作为字符串的公共属性键实现ISelectionItem.Key
公共属性显示为字符串实现ISelectionItem.Display
末级
我遇到的问题是cmbFromGroup.SelectedValue不包含所选项目的值

我得到的是(手表) cmbFromGroup.SelectedValue{Player.SelectionItem}对象

我从cmbFromGroup.SelectedValue获得的唯一选项是Equals、GetHashCode、GetType、ReferenceEquals和ToString,它们都没有按我的预期提供ValueMember


如何从所选项目中获取ValueMember?

在尝试将值绑定到组合框项目时,我遇到了类似的问题,结果是:

Public Class Form1
    Dim ValuesList As List(Of String) = New List(Of String)
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For i = 1 To 10
            ComboBox1.Items.Add("Item" & i)
            ValuesList.Add("Value" & i)
        Next
    End Sub

    Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
        Dim selectedItem = ComboBox1.SelectedItem
        Dim selectedItemValue As String = ValuesList.Item(ComboBox1.SelectedIndex)
        MsgBox(selectedItem & " " & selectedItemValue)
    End Sub
End Class

在尝试将值绑定到ComboBox项时,我遇到了类似的问题,结果是:

Public Class Form1
    Dim ValuesList As List(Of String) = New List(Of String)
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For i = 1 To 10
            ComboBox1.Items.Add("Item" & i)
            ValuesList.Add("Value" & i)
        Next
    End Sub

    Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As EventArgs) Handles ComboBox1.SelectionChangeCommitted
        Dim selectedItem = ComboBox1.SelectedItem
        Dim selectedItemValue As String = ValuesList.Item(ComboBox1.SelectedIndex)
        MsgBox(selectedItem & " " & selectedItemValue)
    End Sub
End Class

我最终想出的解决办法是

cmbFromGroup.SelectedIndex = -1

然后在cmbFromGroup_SelectedIndexChanged sub.

中设置陷阱。我最终提出的解决方案是

cmbFromGroup.SelectedIndex = -1

然后在cmbFromGroup_SelectedIndexChanged sub.中设置陷阱。

使用组合框上的
.text

Dim x As String = cmbFromGroup.text

在组合框上使用
.text

Dim x As String = cmbFromGroup.text

我也遇到了同样的问题,并设法使用了一个数据库(使用存储过程)。 下面是相关的代码位

'On Form load or Button Click (Depending on your application)
conString.Open() 'change conString to your connection string name
'Set Command for the stored procedure
Dim sqlComGetDirectorates As New SqlCommand
With sqlComGetDirectorates
     .CommandType = CommandType.StoredProcedure
     .Connection = conString
     .CommandText = "ProcGetDirectorates" 'your stored procedure name
     'if your stored procedure has parameters
     '.Parameters.AddWithValue("@OfficerIdentity", txtPNum.Text) 
End With

'Create Data Adapter (Using the stored procedure Command created earlier)
' Create a data table and Fill the Data adapter 
Dim DatadptDirectorates As New SqlDataAdapter(sqlComGetDirectorates)
Dim dattabDirectorates As New DataTable
DatadptDirectorates.Fill(dattabDirectorates)
'Your Combobox 
ComboDirectorate.DataSource = dattabDirectorates
ComboDirectorate.DisplayMember = "DirectorateName"
ComboDirectorate.ValueMember = "DirectorateCode"
'User will see DisplayMember in the Combobox
'在组合框的SelectedIndexChanged上

txtdirectorial.Text=ComboDirectional.SelectedItem(1)

''注意:Combobox.SelectedItem将在内部从''存储过程的结果中获取一行 ''您需要通过指定组合框来获得所需的值。选择EdItem(?) ''在您的结果(来自存储过程)中,您有0-xx列,请为(??)选择适当的数字


希望这有帮助。

我也遇到了同样的问题,并设法使用了数据库(使用存储过程)。 下面是相关的代码位

'On Form load or Button Click (Depending on your application)
conString.Open() 'change conString to your connection string name
'Set Command for the stored procedure
Dim sqlComGetDirectorates As New SqlCommand
With sqlComGetDirectorates
     .CommandType = CommandType.StoredProcedure
     .Connection = conString
     .CommandText = "ProcGetDirectorates" 'your stored procedure name
     'if your stored procedure has parameters
     '.Parameters.AddWithValue("@OfficerIdentity", txtPNum.Text) 
End With

'Create Data Adapter (Using the stored procedure Command created earlier)
' Create a data table and Fill the Data adapter 
Dim DatadptDirectorates As New SqlDataAdapter(sqlComGetDirectorates)
Dim dattabDirectorates As New DataTable
DatadptDirectorates.Fill(dattabDirectorates)
'Your Combobox 
ComboDirectorate.DataSource = dattabDirectorates
ComboDirectorate.DisplayMember = "DirectorateName"
ComboDirectorate.ValueMember = "DirectorateCode"
'User will see DisplayMember in the Combobox
'在组合框的SelectedIndexChanged上

txtdirectorial.Text=ComboDirectional.SelectedItem(1)

''注意:Combobox.SelectedItem将在内部从''存储过程的结果中获取一行 ''您需要通过指定组合框来获得所需的值。选择EdItem(?) ''在您的结果(来自存储过程)中,您有0-xx列,请为(??)选择适当的数字

希望这有帮助