Newsgroup: it.comp.lang.visual-basic
Titolo: Consiglio su come caricare e richiamare dati in una combobox

Ciao a tutti,
nell'ottimizzare un po' il mio codice mi sono accorto che per caricare una 
combobox ci metto "molto" tempo.
Ecco come normalmente carico i dati e mi posiziono sul record corretto.
****************************************************
Private Sub Form_Load()
    Dim SSQL as String
    Dim RsTmp As New ADODB.Recordset
    Dim i as Long
    'COUNTRY
    SSQL = "SELECT ID, Country FROM [Country] "
    RsTmp.Open SSQL, AdoCnnSql, adOpenStatic, adLockBatchOptimistic
            While Not RsTmp.EOF
                cmbCountry.AddItem RsTmp!Country
                cmbCountry.ItemData(cmbCountry.NewIndex) = RsTmp!ID
                    RsTmp.MoveNext
            Wend
    RsTmp.Close
    Set RsTmp = Nothing
        'RECUPERO ID DAL RECORDSET RsCustomer aperto in precedenza
    For i = 0 To cmbCountry.ListCount - 1
       If cmbCountry.ItemData(i) = RsCustomer!IdCountry Then
            cmbCountry.ListIndex = i
            Exit For
       End If
    Next i
End Sub
****************************************************
Naturalmente il punto lento è il CICLO FOR per trovare l'indice corretto 
dove posizionarmi nella combobox;
se fortunatamente l'ID corretto è uno dei primi il ciclo si interrompe ed il 
caricamento è breve, altrimenti diventa lento e caricando anche 30-40 combo 
in una form i tempi si allungano notevolmente....
La mia curiosità è quella di sapere se anche voi normalmente caricate e 
richiamate.
Grazie a tutti per i consigli.
Gian


Hai già il ciclo While...Wend per ogni combo, il test sull'ID fallo in quel loop
e memorizza il listindex corrispondente (= combo.NewIndex).
Bye
Raf

 Raf
E' vero, se devi caricare il record una volta sola migliori la situazione e 
ti risparmi un ciclo,
ma nel caso in cui tu abbia una datagrid ed un frame contenente il dettaglio 
dei campi, quando ti muovi sulla griglia devi aggiornare anche il dettaglio 
e quindi fare un cliclo di ricerca index della combo, e quello sinceramente 
mi sembra molto dispendioso.
Per quello come fate?????
grazie
Gian 


Il più delle volte i dettagli non sono editabili (e allora non uso combo) e si
editano in un form a parte (quello sì con i combo), ciascuno dei quali viene
quindi caricato e posizionato una volta sola, ma solo se l'utente lo desidera
premendo un apposito bottone "Edit", e non come credo succeda a te quando si
scorre la grid.
Altre volte uso una grid (TrueDBGrid) che consente l'editing diretto.
Comunque 30-40 combo son tanti, considera l'idea di dividerli in più "pagine"
caricate individualmente.
Bye
Raf

Ok,
prendo spunto da varie soluzioni come quella di caricare in momenti diversi 
i dati...
L'unica cosa che mi interessa ancora sapere è se secondo te il ciclo for è 
il metodo più performante per assegnare un valore alla combo.
Bye
Gian
"Rafunk" <rafun...@NOTHANKSlibero.it> ha scritto nel messaggio 
news:e08rpn$jra$1...@alix.livenet.it...


 for è il metodo più performante per assegnare un valore alla combo.
Se la ricerca è in base al valore nell'array ItemData, l'unico modo che conosco
è il ciclo for.
Se invece devi ricercare una stringa nella parte "lista" del combo, la soluzione
più rapida è quella qui descritta:
http://vbnet.mvps.org/code/listapi/findinglistitems.htm
Naturalmente devi usare le costanti CB_ al posto di LB_
Private Const CB_FINDSTRING = &H14C
Private Const CB_FINDSTRINGEXACT = &H158
Ciao
Raf