come aggiungere valore alla voce del componente combobox

Come posso inserire I dati di ciascun elemento combobox in Visual Basic 2010?

Come html casella a discesa.

O esiste un modo per aggiungere i valori per ogni elemento ?

Io sto aggiungendo un elemento da database MySQL come questo:

Command = New MySqlCommand("SELECT * FROM `maillist` WHERE l_id = '" & id & "'", connection)

Command.CommandTimeout = 30
Reader = Command.ExecuteReader()
If Reader.HasRows = True Then
    While Reader.Read()
        ComboBox1.Items.Add(Reader("name"))
    End While
End If

Ho bisogno di aggiungere Reader("ID") come valore di ogni elemento…

OriginaleL’autore Utku Dalmaz | 2009-12-11

6 Replies
  1. 9

    Se si desidera utilizzare il SelectedValue quindi la tua combobox deve essere con associazione a dati.

    Per impostare la combobox:

    ComboBox1.DataSource = GetMailItems()
    ComboBox1.DisplayMember = "Name"
    ComboBox1.ValueMember = "ID"

    Per ottenere i dati:

    Function GetMailItems() As List(Of MailItem)
    
        Dim mailItems = New List(Of MailItem)
    
        Command = New MySqlCommand("SELECT * FROM `maillist` WHERE l_id = '" & id & "'", connection)
        Command.CommandTimeout = 30
        Reader = Command.ExecuteReader()
    
        If Reader.HasRows = True Then
            While Reader.Read()
                mailItems.Add(New MailItem(Reader("ID"), Reader("name")))
            End While
        End If
    
        Return mailItems
    
    End Function
    
    Public Class MailItem
    
        Public Sub New(ByVal id As Integer, ByVal name As String)
            mID = id
            mName = name
        End Sub
    
        Private mID As Integer
        Public Property ID() As Integer
            Get
                Return mID
            End Get
            Set(ByVal value As Integer)
                mID = value
            End Set
        End Property
    
        Private mName As String
        Public Property Name() As String
            Get
                Return mName
            End Get
            Set(ByVal value As String)
                mName = value
            End Set
        End Property
    
    End Class
    In vb.net 2015 doesnt lavoro 🙁

    OriginaleL’autore Tim Murphy

  2. 14

    Sto supponendo che si vuole aggiungere elementi a una ComboBox in un Windows form. Anche se Klaus è sulla strada giusta, credo che la ListItem classe è un membro del Sistema.Web.Interfaccia utente.WebControls spazio dei nomi. Quindi non dovrebbe essere utilizzato in un Windows form soluzione. È possibile, tuttavia, creare una propria classe che è possibile utilizzare al suo posto.
    Creare una semplice classe, chiamato MyListItem (o qualunque nome si sceglie) come questo:

    Public Class MyListItem
        Private mText As String
        Private mValue As String
    
        Public Sub New(ByVal pText As String, ByVal pValue As String)
            mText = pText
            mValue = pValue
        End Sub
    
        Public ReadOnly Property Text() As String
            Get
                Return mText
            End Get
        End Property
    
        Public ReadOnly Property Value() As String
            Get
                Return mValue
            End Get
        End Property
    
        Public Overrides Function ToString() As String
            Return mText
        End Function
    End Class

    Ora, quando si desidera aggiungere elementi alla tua ComboBox si può fare in questo modo:

    myComboBox.Items.Add(New MyListItem("Text to be displayed", "value of the item"))

    Ora, quando si desidera recuperare il valore dell’elemento selezionato dalla tua ComboBox si può fare in questo modo:

    Dim oItem As MyListItem = CType(myComboBox.SelectedItem, MyListItem)
    MessageBox.Show("The Value of the Item selected is: " & oItem.Value)

    Una delle chiavi qui è l’override del metodo ToString della classe. Questo è dove la ComboBox ottiene il testo che viene visualizzato.


    Matt fatto un ottimo punto, nel suo commento qui sotto, sull’utilizzo di farmaci Generici per renderlo ancora più flessibile. Così mi chiesi cosa sarebbe simile.

    Ecco il nuovo e migliorato GenericListItem classe:

    Public Class GenericListItem(Of T)
        Private mText As String
        Private mValue As T
    
        Public Sub New(ByVal pText As String, ByVal pValue As T)
            mText = pText
            mValue = pValue
        End Sub
    
        Public ReadOnly Property Text() As String
            Get
                Return mText
            End Get
        End Property
    
        Public ReadOnly Property Value() As T
            Get
                Return mValue
            End Get
        End Property
    
        Public Overrides Function ToString() As String
            Return mText
        End Function
    End Class

    E qui è come aggiungere ora Generici articoli per la tua ComboBox. In questo caso un numero Intero:

    Me.myComboBox.Items.Add(New GenericListItem(Of Integer)("Text to be displayed", 1))

    E ora il recupero dell’elemento:

    Dim oItem As GenericListItem(Of Integer) = CType(Me.myComboBox.SelectedItem, GenericListItem(Of Integer))
    MessageBox.Show("The value of the Item selected is: " & oItem.Value.ToString())

    Tenere a mente che il tipo Integer può essere qualsiasi tipo di oggetto o del tipo di valore. Se si desidera essere un oggetto da una delle classi personalizzate che bene. Fondamentalmente tutto ciò che va con questo approccio.

    +1 grande risposta:- Ancora meglio fare il mValue un Tipo Generico Of T invece di String, quindi è possibile utilizzare un Enum, Integer, ecc per i tuoi valori

    OriginaleL’autore dscarr

  3. 10

    Anche se questa domanda è di 5 anni, mi sono imbattuto in una bella soluzione.

    Utilizzare il ‘DictionaryEntry’ oggetto coppia di chiavi e valori.

    Impostare il ‘DisplayMember’ e ‘ValueMember’ proprietà di:

       Me.myComboBox.DisplayMember = "Key"
       Me.myComboBox.ValueMember = "Value"

    Per aggiungere elementi alla ComboBox:

       Me.myComboBox.Items.Add(New DictionaryEntry("Text to be displayed", 1))

    Per recuperare elementi come questo:

    MsgBox(Me.myComboBox.SelectedItem.Key & " " & Me.myComboBox.SelectedItem.Value)
    Molto bello, molto semplice. Grazie. Paga per tenere su la scansione giù per le risposte.
    Molto bello, ora come posso fare per modificare la Voce selezionata se ho solo la chiave?
    Scorrere attraverso le Voci utilizzando Per…Ogni ciclo. Di controllo per la Voce.Chiave stackoverflow.com/questions/32100580/…
    Ottima soluzione, mi aiuta tanto. Solo una nota. Con Option Strict è attivata, è possibile eseguire in un errore per la Fine Vincolanti per il recupero. Per ottenere intorno a questo uso CType per indicare che l’elemento selezionato è un Dizionario del tipo di Voce. Esempio: CType(Me.myComboBox.SelectedItem,DictionaryEntry).Chiave

    OriginaleL’autore Yakov R.

  4. 1

    Invece di aggiungere Reader("Name") si aggiunge un nuovo ListItem. ListItem ha un Text e un Value proprietà che è possibile impostare.

    vuoi dire listbox ? scusa non ho capito, per favore mostrami breve esempio ?

    OriginaleL’autore Klaus Byskov Pedersen

  5. 1

    Ora è possibile utilizzare insert metodo invece add

    ' Visual Basic
    CheckedListBox1.Items.Insert(0, "Copenhagen")
    Le soluzioni ai problemi che migliorare nel tempo. 🙂

    OriginaleL’autore Rinos

  6. 0

    Sì, per la maggior parte dei casi, non avete bisogno di creare una classe con dei metodi getter e setter. Basta creare un nuovo Dizionario e associarlo all’origine dati. Ecco un esempio in VB utilizzando un ciclo for per impostare il DisplayMember e ValueMember di una casella combinata da un elenco:

            Dim comboSource As New Dictionary(Of String, String)()
            cboMenu.Items.Clear()
            For I = 0 To SomeList.GetUpperBound(0)
                comboSource.Add(SomeList(I).Prop1, SomeList(I).Prop2)
            Next I
            cboMenu.DataSource = New BindingSource(comboSource, Nothing)
            cboMenu.DisplayMember = "Value"
            cboMenu.ValueMember = "Key"

    Quindi è possibile impostare una griglia di dati di visualizzazione di righe in base al valore o qualsiasi cosa avete bisogno chiamando un metodo su clic:

    Private Sub cboMenu_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboMenu.SelectionChangeCommitted
        SetListGrid(cboManufMenu.SelectedValue)
    End Sub

    OriginaleL’autore whyoz

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *