【问题标题】:ComboBox ItemList SelectedValue组合框项目列表 SelectedValue
【发布时间】:2013-08-09 09:36:13
【问题描述】:

VB.NET (2010)

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

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

我遇到的问题是 cmbFromGroup.SelectedValue 不包含所选项目的值。

我得到的是(来自 Watch) cmbFromGroup.SelectedValue {Player.SelectionItem} 对象

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

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

【问题讨论】:

    标签: vb.net combobox datasource list.selectedvalue


    【解决方案1】:

    我在尝试将值绑定到 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
    

    【讨论】:

      【解决方案2】:

      我最终想出的解决方案是

      cmbFromGroup.SelectedIndex = -1
      

      然后在 cmbFromGroup_SelectedIndexChanged 子中捕获它。

      【讨论】:

        【解决方案3】:

        在 Combo 上使用 .text

        Dim x As String = cmbFromGroup.text
        

        【讨论】:

          【解决方案4】:

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

          '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

          txtDirectorate.Text = ComboDirectorate.SelectedItem(1)

          ''注意:Combobox.SelectedItem 将在内部从“存储过程”的结果中获取 ROW ''你需要通过指定combobox.selecteditem(??)来获取你需要的值 ''在您的结果(来自存储过程)中,您有 0 - xx 列,为 (??) 选择适当的数字

          希望对您有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-20
            • 1970-01-01
            • 1970-01-01
            • 2011-02-22
            • 1970-01-01
            • 1970-01-01
            • 2015-11-14
            • 2012-07-14
            相关资源
            最近更新 更多