Aggiornare listbox da evento toolbar

Ciao ragazzi,
sto provando la versione desktop di Xojo creando una semplice applicazione che mi consenta di verificare se possibile effettuare tutte le operazioni che di norma effettuo con altri linguaggi.

Ho riscontrato un primo problema nell’aggiornare i dati all’interno di una listbox. Ho una Window con una toolbar ed una listbox (in realt una grid) che viene popolata inizialmente nell’evento Open della listbox tramite una query ad un database sqlite.

Ogni riga della listbox possiede una checkbox per la selezione e tramite la toolbar decido quale operazione effettuare sulle sole righe selezionate.

Provando a modificare un valore della listbox, ad esempio lo stato di un ulteriore campo checkbox, ottengo correttamente la modifica sulla base dati ma non visivamente nella listbox. Come posso fare per richiamare nuovamente l’evento Open per ricaricare velocemente tutti i dati, senza dover accedere singolarmente alle celle per la modifica?

Ciao,
non so quante riche sono caricate nell listbox
ma credo che farla ricaricare tutta non sia la soluzione migliore se devi modificare solo una cella.

se sai la riga e sai la cella

for i as integer = 0 to Listbox1.ListCount-1
if Listbox1.CellState(i,0) = Checkbox.CheckedStates.Checked then
Listbox1.cell(i, colonna) = “quello che vuoi tu…”
end if
next

ed hai risolto senza ricaricare tutto…

spero di aver capito il tuo problema
Enzo

Grazie per la tua risposta.
Il metodo che mi hai illustrato l’avevo gi provato ma essendo diversi campi da modificare, volevo evitare di riassegnare tutti i campi nuovamente. Al momento ho creato un metodo in un modulo per il caricamento dei dati in cui ho passato il riferimento della listbox. Sembra funzionare bene, al di l di eventuali problemi di “lentezza” su grandi dati. Per questo mi sa che devo fare qualche test.

Ti ringrazio nuovamente per la cortese risposta.

I problemi su molti dati ( 5000 record ) sono soprattutto per la finestra che, in fase di caricamento, va in secondo piano appena la lisbox riempita, poi ovviamente la lentezza etc. Quando poi i record sono parecchi … ciao PEPA…
In un software contabile come quello che st sviluppanto, ad esempio, per una srl solo come movimenti di primanota possiamo arrivare a 50.000 record come nulla;
Ho trovato valida soluzione l’utilizzo di ‘Limit’ e ‘Offset’ nella query sql e alcuni controlli per navigare nella listbox;
Vedi esempio …

SELECT rowid, campo1, campo2 FROM tabella LIMIT 10 OFFSET 10;

in una celltag di una qualsiasi colonna carica rowid, almeno sai cosa stai modificando

Nell’evento CellAction puoi rilevare a livello riga quale campo hai modificato ( da celltag della colonna impostata ) e intervenire con una query solo sul rigo appunto che stato modificato, quindi aggiornarlo in tempo reale e aggiornare il record.

Non metterlo in un modulo, metti il codice in un metodo della finestra.
Assegna l’identificativo del record alla rowTag della listbox, poi se vuoi aggiornare solo quella riga con i nuovi dati (magari presi da un record set), scorri tutte le righe della listbox fino a trovare quella che ti interessa e se la trovi aggiorna i campi.

Scusa Antonio, ma se i record sono moltissimi, un evento di tipo CellAction alla fine si moltiplica per tutte le righe di tutte le celle di una listbox ???
Anche perch se cos, ora capisco perch si aggiorna lentamente quando i record sono tantissimi.

in che senso? cellAction relativo alla sola cella, non importa quante ce ne siano

Il problema dei tanti dati in una listbox sono dovuti al caricamento (devi passare una gran mole di dati da una struttura ad un’altra)
la listbox in genere ottimizza la visualizzazione ai soli dati visibili (quindi non teoricamente un problema), ovviamente se i dati sono tantissimi possono crearsi situazioni limite. Questo lo puoi verificare vedendo se (a parte il caricamento) hai tempi di risposta non conformi nello scorrimento.

Questo sposta il problema: o trovi il modo di ottimizzare il trasferimento dei dati, oppure limiti (come hai individuato) i dati
Onestamente non vedo l’utilit pratica di scorrere gran quantit di dati, non pratico, soggetto a sviste etc.
Limitare i dati lo puoi fare con filtri (mostra le prime note dal al, relative a, superiori a etc…) divide et impera!