Creative Commons BY-NC-ND 2.5Questo sito e tutto il suo contenuto sono distribuiti sotto la licenza Creative Commons Attribuzione - Non Commerciale - Non opere derivate 2.5 Italia e con le condizioni d'uso definite nel disclaimer: siete pregati di leggere entrambi questi documenti prima di usufruire dei contenuti di questo sito. Per alcuni contenuti è necessaria una registrazione gratuita: non è necessario pagare e non è necessario accumulare punteggi per accedere agli articoli e scaricare i sorgenti. Basta solo essere onesti. Se volete che questo sito continui a rimanere attivo, a contribuire ogni giorno alla diffusione della cultura libera, non copiate il materiale per ripubblicarlo in altri luoghi : chi fa questo è solo un miserabile e un perdente. Se volete partecipare su settorezero e rendere le vostre idee, i vostri progetti, fruibili da tutti senza limitazioni, come dovrebbe essere in un paese civile e acculturato, potete farlo tranquillamente.

VB.NET Collegare una ComboBox a un DataSet: Mostrare un valore ed ottenerne un altro

Autore: Giovanni Bernardo | Data pubblicazione: 14 dicembre 2008
Categorie: VB.NET

Situazione classica in ambito programmazione: abbiamo una comboBox (casella a discesa) che mostra una serie di valori, l’utente seleziona un valore tra quelli in elenco ma dal lato programma non ci serve il valore selezionato, bensì un altro (in genere un ID numerico) ma comunque associato al valore scelto. In VB.NET è molto semplice ottenere questo effetto, vediamo come ottenerlo associando a una comboBox gli elementi di un DataSet.

Per chi non lo sapesse, un DataSet è una sorta di “Tabella virtuale”, utilizzata in genere per contenere i dati provenienti da un database, da un file XML o altro. Ma niente meglio del fare esempi può chiarirne l’utilizzo e la praticità. Dall’IDE di Visual Basic .NET (non lo avete ancora scaricato? La versione Express è free, cosa state aspettando? Clicca qui per scaricarlo). Iniziamo col creare un nuovo progetto winform, ci piazziamo su una comboBox, la chiamiamo “cmbFrutti” (ok sto facendo un esempio banale… quello di quanto costa la frutta e di che colore è… ma non mi veniva in mente niente di più immediato ;) ). Disegniamo inoltre tre TextBox alle quali daremo i nomi txtFruttoNome, txtFruttoId, txtFruttoColore, se vogliamo, mettiamoci vicino tre label per identificare cosa mostreranno le tre textbox, alla fine dovrebbe venir fuori una cosa del genere:

vbdotnet-combobox_collegata_dataset01

Facciamo doppio click in un punto vuoto del form, in maniera da scrivere il codice per l’evento “Load” del form stesso e cominciamo a scrivere le istruzioni per inizializzare il dataset e la combobox. Istanziamo dapprima un DataSet al quale daremo il nome di DSTabellaFrutti:

Dim DSTabellaFrutti As New Data.DataSet

un dataset non serve a nulla se al suo interno non vi sono tabelle, aggiungiamone una:

DSTabellaFrutti.Tables.Add("Frutti")

Una tabella ha bisogno di colonne, giusto? Aggiungiamone qualcuna:

DSTabellaFrutti.Tables("Frutti").Columns.Add("Id")
DSTabellaFrutti.Tables("Frutti").Columns.Add("Frutto")
DSTabellaFrutti.Tables("Frutti").Columns.Add("Colore")
DSTabellaFrutti.Tables("Frutti").Columns.Add("Prezzo")

Queste 4 semplici righe non fanno altro che dire al VB: aggiungi una colonna alla tabella “Frutti” e chiamala “Id” e così via. Passiamo quindi a popolare con dei dati la nostra tabella. Lo facciamo utilizzando un array (un vettore). L’array dovrà contenere 4 elementi in quanto 4 sono le righe della tabella da riempire, lo dimensioniamo quindi dando 3 come indice massimo (da 0 a 3 sono 4 valori, ok?: 0, 1, 2 e 3):

Dim Frutto(3) As String

Riempiamo quindi l’array:

Frutto(0) = "0" 'id : prima colonna
Frutto(1) = "Mela" 'Frutto : seconda colonna
Frutto(2) = "Rosso" ' Colore : terza colonna
Frutto(3) = "2" ' Prezzo : quarta colonna

come vedete devo inserire gli elementi nell’array nello stesso ordine con cui ho creato le righe nel dataset. Riempiamo quindi una riga del dataset:

DSTabellaFrutti.Tables("Frutti").Rows.Add(Frutto)

Con questa istruzione in pratica ho detto: nella tabella “Frutti” aggiungi una riga e riempila con i valori contenuti nell’array che ho chiamato “Frutto”. Una volta riempito il dataset, posso anche ridefinire l’array con altri valori e quelli che ho già inserito nel dataset non verranno alterati:

Frutto(0) = "1"
Frutto(1) = "Banana"
Frutto(2) = "Giallo"
Frutto(3) = "2,3"
DSTabellaFrutti.Tables("Frutti").Rows.Add(Frutto)

e così via mi posso divertire ad inserire tutti i frutti del mondo nel dataset. Una volta che siamo soddisfatti del nostro lavoro da fruttivendoli, facciamo in modo che l’utente possa scegliere dalla combobox il frutto di suo gradimento e quindi visualizzarne le informazioni. Per fare ciò definiamo le proprietà della combobox che abbiamo creato:

cmbFrutti.DataSource = DSTabellaFrutti.Tables("Frutti")
cmbFrutti.DisplayMember = "Frutto"
cmbFrutti.ValueMember = "Id"

In pratica: la proprietà “DataSource” indica alla combobox da quale sorgente dati deve prelevare i suoi elementi, gli abbiamo detto in questo caso che deve prelevare i suoi elementi dal dataset DSTabellaFrutti e più precisamente dalla sua tabella che si chiama “Frutti” (un dataset può contenere più di una tabella, per cui dobbiamo specificare da quale tabella). La proprietà “DisplayMember” indica alla combobox cosa mostrare a video, difatti non può certo mostrare tutto il contenuto del dataset, gli diciamo quindi di mostrare soltanto il contenuto della colonna chiamata “Frutto”. La proprietà “ValueMember” invece indica il valore restituito dalla proprietà “SelectedValue” della combobox. Questa cosa la vediamo tra un po’ in dettaglio. Arrivati a questo punto è tutto pronto: abbiamo creato il dataset e lo abbiamo associato alla nostra combobox, abbiamo inoltre detto alla combobox cosa mostrare a video e quale valore ci deve restituire. Facciamo ora in modo che nelle 3 textbox ci vengano mostrare le altre caratteristiche del frutto che verrà selezionato dalla casella a discesa. Per fare questo sfruttiamo l’evento “SelectedValueChanged” della combobox creando la sub:

Private Sub cmbFrutti_SelectedIndexChanged _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles cmbFrutti.SelectedValueChanged
 
txtFruttoNome.Text = cmbFrutti.SelectedItem("Frutto")
txtFruttoId.Text = cmbFrutti.SelectedValue.ToString
txtFruttoColore.Text = cmbFrutti.SelectedItem("Colore")
 
End Sub

In breve: questa sub viene richiamata ogni qualvolta l’utente effettua una selezione dalla casella a discesa, per riempire le textbox usiamo le proprietà:

  • SelectedValue che indica il valore selezionato (ovvero quello definito dalla proprietà ValueMember)
  • SelectedItem che indica l’intero oggetto selezionato (in questo caso l’intera riga della tabella) per cui specifichiamo tra parentesi di quale colonna vogliamo il valore.

Altre proprietà utili per la restituzione di valori che in questo esempio però non ho fatto sono:

  • Text che restituisce il testo scritto nella combobox (in questo esempio praticamente equivale a scrivere SelectedItem(“Frutto”), dal momento che come DisplayMember -ovvero ciò che deve essere scritto/visualizzato nella combobox- abbiamo impostato la colonna “Frutto”)
  • SelectedIndex : indica l’indice numerico della selezione, in pratica restituisce 0 se selezioniamo il primo elemento, 1 se selezioniamo il secondo elemento della lista ecc

Se vi scoccia scrivere il codice per fare le prove, qui c’è il codice sorgente dell’esempio:
Test ComboBox con Dataset (1301)

Articoli che potrebbero interessarti

L'articolo ti è piaciuto o ti è stato utile per risolvere un problema? Supporta e mantieni in vita questo sito, ci basta soltanto un caffè o una birra.
Se desiderate che settorezero continui a rimanere gratuito e fruibile da tutti, non copiate il nostro materiale e segnalateci se qualcuno lo fa

Puoi lasciare un commento, o un trackback dal tuo sito.

  1. #1 da Camminolontano il 9 settembre 2010

    Bellissimo, ma se la combo è una cella di una datagridview? sono riuscito a popolarla ma :
    txtFruttoNome.Text = cmbFrutti.SelectedItem(“Frutto”)
    txtFruttoId.Text = cmbFrutti.SelectedValue.ToString
    txtFruttoColore.Text = cmbFrutti.SelectedItem(“Colore”)

    questo per prendermi il valore selezionato non funziona. Sapreste aiutarmi?

Devi essere collegato per lasciare un commento.

  1. Ancora nessun trackback
settorezero.com e il logo Zroid™ ©2007÷2012 Giovanni Bernardo - E' vietata la copia e la distribuzione anche parziale dei contenuti di questo sito web senza l'esplicito consenso dell'autore.
I contenuti di settorezero.com sono distribuiti sotto una licenza Creative Commons Attribuzione-Non Commerciale-Non Opere derivate 2.5 Italia a cui vanno aggiunte le condizioni d'uso definite nel disclaimer.
settorezero.com e tutti i suoi contenuti sono tutelati dalla legge sul diritto d'autore per cui i trasgressori sono perseguibili a norma di legge.
Creative Commons BY-NC-ND 2.5
Il tema di questo sito è basato sul tema Fusion per wordpress, realizzato originariamente da digitalnature e fa uso del plugin Wassup per il computo delle statistiche. Per contattare l'autore siete pregati di utilizzare la sezione contatti.
Per essere aggiornato con tutte le novità di settorezero.com seguici anche anche su Facebook Twitter Tumblr Blogspot Youtube.