Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022

    [VB.NET] popolare ComboBox con dataReader

    In questo modo riesco a popolare un combo box prelevando i dati da una tabella di database, ma come faccio a definire un indice specifico?
    Nell'esempio uso il campo "comune" come TEXT, ma vorrei contemporanemente usare il campo ID come VALUE.

    codice:
    Dim sqlComuni As String = "SELECT ID, comune FROM citta ORDER BY comune"
    
    objCmd = New OleDbCommand(sqlComuni, con)
    objReader = objCmd.ExecuteReader
    
    
      While objReader.Read
           cmbBoxComune.Items.Add(objReader("Comune"))
      End While

    Tutto questo è molto più facile con un dataset, ma ho l'esigenza di non usarlo.
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022
    Guardando qua e là, pare che la soluzione dovrebbe essere la seguente

    codice:
    While objReader.Read
           cmbBoxComune.Items.Add(
           New ListItem(objReader("Comune"), objReader("ID"))
    End While
    Eppure ListItem mi viene sottolineato come errore

    Grazie a chiunque sappia illuminarmi.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    261
    ListItem è una classe che devi crearti e serve per reperire e scrivere i dati nella combo , ti allego un esempio di ListItem

    codice:
    Option Strict On
    Option Explicit On 
    ' Questa classe è usata per memorizzare il testo e l'indice di un record 
    '  
    Public Class ListItem
        Private mValue As String   ' Memorizza la descrizione description of the item
        Private mID As Integer     ' Memorizza l'indice
    
        Public Sub New(ByVal strValue As String, ByVal intID As Integer)
            mValue = strValue
            mID = intID
        End Sub
    
        Public Sub New()
            mValue = ""
            mID = 0
        End Sub
    
        Property ID() As Integer
            Get
                Return mID
            End Get
            Set(ByVal Value As Integer)
                mID = Value
            End Set
        End Property
    
        Property Value() As String
            Get
                Return mValue
            End Get
            Set(ByVal Value As String)
                mValue = Value
            End Set
        End Property
    
        Public Overrides Function ToString() As String
            Return mValue
        End Function
        
    End Class

  4. #4
    Basta definire questa nuova classe ed usarla al posto di String:
    codice:
    Public Class ListElement
        Private m_text As String
        Private m_id As Integer
    
        Public Property Text() As String
            Get
                Return m_text
            End Get
            Set(ByVal Value As String)
                m_text = Value
            End Set
        End Property
    
        Public Property ID() As Integer
            Get
                Return m_id
            End Get
            Set(ByVal Value As Integer)
                m_id = Value
            End Set
        End Property
    
        Public Sub New(ByVal text As String, ByVal id As Integer)
            m_text = text
            m_id = id
        End Sub
    
        Public Overrides Function ToString() As String
            Return m_text
        End Function
    End Class
    
    'nella parte che carica il Combo:
    Dim le As ListElement
    
    While objReader.Read
        le = New ListElement(objReader("Comune"), objReader("ID"))
        cmbBoxComune.Items.Add(le)
    End While
    
    'in seguito, per conoscere l'ID selezionato nel combo:
    Private Sub cmbBoxComune_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbBoxComune.SelectedIndexChanged
        Dim le As ListElement
    
        le = CType(cmbBoxComune.SelectedItem, ListElement)
    
        Console.WriteLine(co.ID)
    End Sub
    Chi non cerca trova.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    261

    Abbiamo mandato la stessa cosa io e Tas nello stesso minuto 12.42....

  6. #6
    Utente di HTML.it L'avatar di Umanista
    Registrato dal
    Jan 2002
    Messaggi
    1,022
    Grazie mille, ragazzi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.