Newsgroup: it.comp.lang.visual-basic
Titolo: Popolamento ComboBox

Ho un recordset che estrae Raggione Sociale e codice di un dipendente;
è possibile popolare la combobox di modo che appaia la ragione sociale,
mentre il valore sia il codice ?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 mentre il valore sia il codice ?
Se ne è parlato di recente... Si disse che esiste un OCX combobox a
doppiacolonna... In questo momento non ti saprei dire dove, però. In
alternativa se il codice è numerico puoi utilizzare la proprietà ItemData
del combobox... In fase di caricamento dei dati oltre a Combo1.AddItem
Elemento inserisci anche Combo1.ItemData(Combo1.ListCount-1) = Codice. Poi
lo richiami con Codice = Combo1.ItemData(Combo1.ListIndex).
Antonio Mirarchi

 del combobox...
Mi sbagliavo, si tratta di una listbox, ma credo che non cambi molto, e
purtroppo il codice è alfanumerico.


 purtroppo il codice è alfanumerico.
In effetti non cambia niente a parte che non esiste neppure l'OCX.
Sfortunatamente siccome tu usi un DB non puoi neanche utilizzare una
collection (ogni volta che ho osato fare una cosa del tipo Collezione.Add
Data1.RecordSet("campo") è successo di tutto). Una soluzione che posso
suggerirti (poco elegante, certamente... Ma il fine giustifica i mezzi) è
quella di utilizzare una seconda ListBox con la proprietà Visible = False.
Oppure, se puoi sapere in anticipo quanti sono i valori da inserire nella
listbox, puoi anche usare un vettore... Fai un po' te. Ricordati comunque
che sia utilizzando il vettore che la list devi preoccuparti di fare il modo
che siano "sincronizzate": ogni modifica sulla 1° list deve riflettersi
ugualmente sulla 2°!
Antonio Mirarchi

 sociale, mentre il valore sia il codice ?
prova a guardare l'ocx dbcombo, oppure il dblist, che trovi flaggando la
voce
Progetto/Componenti/Microsoft Data Bound List Controls
(o almeno questo è quello che dice enzo68)
--
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

L'idea che avevo era di creare un array, magari esisteva qualcosa di
meglio :-)


 (o almeno questo è quello che dice enzo68)
L'ho guardato, non sono riuscito nemmeno a popolarlo per visualizzare i
dati normalmente


Non temere, l'array è la migliore soluzione, per velocità e sintesi.
Se proprio vogliamo essere maniaci puoi utilizzare una collection, che ti
permette maggiore comodità di utilizzo visto che permette la ricerca per
chiave oltre che per indice.
OCX che fanno questo lavoro ce ne sono in giro ma quasi tutti a pagamento.
Gli Sheridan Active ThreeD hanno qualcosa di simile.
Il problema è che la proprietà ItemData può contenere solo valori numerici
quindi non è in genere molto utile.
Puoi però sempre scrivere il tuo ocx personalizzato, aggiungi una combo,
crei l'array e riscrivi la property ItemData in modo da accettare un
variant, non sarebbe complesso e ti ritroveresti un controllo pronto
all'uso.
Saluti.
Giubodi

 mentre il valore sia il codice ?
Io faccio cosě
Combo1.AddItem rs.fields("Ragione Sociale") & space(100) &  "~" &
rs.fields("codice")
e lo ritrovo
codice=mid(Combo1,instr(Combo1,"~")+1)
non č molto elegante ma funziona
Ciao

si, l'array è la soluzione migliore... attento a dimensionarlo
correttamente, oppure utilizza un array a dimensione variabile... vadi un po
tu se utilizzare 2 array con lo stesso indice oppure una matrice a 2
colonne... l'ideale sarebbe l'array di record, in modo che il primo campo
(il nome) lo dichiari string * 30 e l'altro string * 5 e risparmi spazio se
prevedi che il tuo array abbia dimensioni notevoli

 mentre il valore sia il codice ?
I combo di VB5/6 (non 
VB.NET
, ma li si può ereditare) hanno una proprietà
poco conosciuta che ti permette di fare proprio questo:
Combo1.AddItem Codice
Combo1.ItemData(Combo1.NewIndex) = RagioneSociale
Puoi sapere la ragione sociale del codice selezionato con
Debug.Print Combo1.ItemData(Combo1.ListIndex)
Ciao
--
Math Parser : 
http://www.neodatatype.net
Sito Comune : 
http://www.it-lang-vb.net

 Combo1.ItemData(Combo1.NewIndex) = RagioneSociale
Zanna, a me pare che la ItemData sia solo numerica
Per fare qualcosa del genere occorre che l'ItemData vada a puntare su un
altro vettore opportunamente costruito

 altro vettore opportunamente costruito
Vero :)
Allora è meglio usare un array parallelo.
Meglio :) l'uso di ItemData non è il massimo dell'ortodossia.
