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.