Pagina 1 di 1
VB.NET: DataGridView si “freeza” quando carico tanti dati (UI thread?)
Inviato: sab feb 28, 2026 11:41 pm
da marco
Ciao a tutti,
sto imparando VB.NET WinForms e ho un problema: quando carico tante righe in un DataGridView (tipo 50k),
la form si blocca per parecchi secondi e Windows dice “Non risponde”.
Io faccio:
- query al DB
- ciclo For Each riga e aggiungo al DataGridView
C’è un modo semplice per evitare il freeze? Non sono pratico di thread/async.
Grazie!
Marco
Re: VB.NET: DataGridView si “freeza” quando carico tanti dati (UI thread?)
Inviato: dom mar 01, 2026 12:41 am
da fabio
Ciao Marco,
sì: il freeze è perché stai lavorando sul thread UI.
Due approcci “semplici”:
1) NON aggiungere righe una ad una: usa DataBinding
- metti i dati in un DataTable
- DataGridView.DataSource = DataTable
È molto più veloce.
2) Se la query è lenta: eseguila in background (Task/Async) e poi assegni il DataSource alla fine.
Prima domanda: stai già usando DataTable / BindingSource oppure fai .Rows.Add in loop?
Re: VB.NET: DataGridView si “freeza” quando carico tanti dati (UI thread?)
Inviato: dom mar 01, 2026 1:41 am
da marco
Sto facendo proprio Rows.Add in un loop ?
Recupero i dati con un DataReader e poi aggiungo cella per cella.
Quindi mi conviene riempire un DataTable e assegnarlo in blocco?
E se voglio formattare alcune colonne?
Re: VB.NET: DataGridView si “freeza” quando carico tanti dati (UI thread?)
Inviato: dom mar 01, 2026 3:41 am
da fabio
Esatto: DataTable + DataSource e poi formatti con:
- DataGridView.Columns("nome").DefaultCellStyle...
- eventi CellFormatting se serve.
Suggerimento “pro”: se hai 50k righe valuta anche:
- VirtualMode del DataGridView
- paginazione lato DB (LIMIT)
Ma per partire: DataTable + DataBinding ti cambia la vita.