Newsgroup: it.comp.lang.visual-basic
Titolo: Combobox in Datagrid

Ho una datagrid nella quale alcuni campi sono etichette che vengono
prelevate da un'apposita tabella tramite join. Trattandosi di valori che
devono essere scelti da un elenco fisso voglio dare all'utente la
possibilità di modificare tale valore tramite una dropdown list. Ho creato
la d.d.l. invisibile e quando l'utente seleziona la colonna in questione la
sposto e ne cambio la dimensione per adattarla alla cella corrente, quindi
la faccio diventare visibile.
L'utente effettua la sua scelta e nell'evento _LostFocus (_Change, che
presumevo essere in risposta a CBN_SELCHANGE è un evento che a quanto pare
non si verifica mai...), apro un recordset al volo per effettuare
l'aggiornamento, quindi effettuo il refresh del controllo Adodc che riempie
da datagrid e della datagrid stessa, ma questa ha ancora il valore
precedente...
Ho messo nel codice una decina di refresh di seguito e mi sono accorto che
dopo un certo numero (variabile di volta in volta...) di rinfreschi
finalmente ottengo il nuovo valore. Come si può evitare questa immane
schifezza? (che tra l'altro rende il programma non reattivo per qualche
secondo...)
Le ho provate tutte, compreso chiudere il recordset e riaprirlo, cancellare
l'intera stringa di connessione e reimpostarla, e mi sa che il prossimo
passo sarà di buttare nella spazzatura l'intero progetto (con VB appresso) e
riscrivermelo in C...

 progetto (con VB appresso) e riscrivermelo in C...
oppure in VB ma senza fidarsi di scorciatoie:
A) La datagrid per funzionare bene ha bisogno che la connessione sia Client:
adUseClient
Se non specifichi nulla la apre SERVER: adUseServer
B)ADOdc introduce cache ed appesantisce tempi di risposta etc etc...A MANINA
si fa prima!
apriti il tuo bel recordset a mano (3/4 istruzioni...se ti fa una function č
riutilizzabile al massimo...cerca i vecchi post anche miei ....qualche tempo
fa avevo postato tutta una serie di function ad un altro frequentatore)
ed ASSOCIALO alla datagrid
C) le griglie son sempre un po "strane" tu vorresti aggiornare in un modo ma
loro seguono regole precise.......casomai illogiche!
In genere se non cambi riga...non si accorgono che vuoi smettere l'edit!
C-bis)
Io li vo in cul%%%%% in altro modo....si porta sulla linea...seleziona
l'edit (ad esempio un doppio click...un tasto F2 ...un popup...quello che
vuoi) ed appare una piccola/grande form caricata con tutti i dati del
record...caso mai impaginati meglio....con tutti i controlli dell'input del
caso! si modifica quello che vuole....la form valida l'input....e poi lo
inserisce( tasto insert o semplice captazione del QueryUnload) nella
griglia....che viene aggiornata!
Per l'aggiornamento io uso una SQL UPDATE/INSERT...ma va bene quello che sai
meglio!
Vantaggio: Usare un cursore keyset/static readonly molto veloce
Svantaggio: bisogna programmare qualche linea di codice a mano!
D) Occhio che non deve essere aggiornata la griglia...ma il recordset!...se
la griglia č bound...segue il recordset!L'adodc inserisce dei ritardi ed una
cache sua....prova a "staccargli la connessione" se č "duro d'orecchi" e a
riconneterla....prima guarda se con un requery ottieniiqualcosa!
bye man!
--
Il Wodkino Nazionale č a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 ...se cercate bene da qualche
parte c'č anche il forum!