Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-09-2013, 22:58   #1
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
[C#] Popolamento progressivo datagridview

Ciao, ho necessità di popolare diverse dataGridView con migliaia e migliaia di record a partire da un database.
Al momento adotto un sistema che non tanto mi piace... prelevo i dati dal db, li metto in una datatable e successivamente li faccio visualizzare.
Sul pc in firma anche se ci sono oltre 20.000 righe il caricamento è istantaneo, ma basta andare a provare il software su un pc più "normale" ed un piccolo impuntamento iniziale si percepisce.

Altra nota dolente della mia soluzione è che non riempio la datatable in un thread in background, ciò comporta avere l'interfaccia del tutto bloccata fin quando non è andato il buon fine il prelievo dei dati.
Altro grossissimo problema è quando utilizzo un server mysql via internet per popolare il tutto, dove i tempi di attesa si prolungano per almeno 12-15 secondi durante i quali non si può fare nulla...

Avete qualche soluzione da proporre?

Grazie
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 08:59   #2
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da rizzotti91 Guarda i messaggi
Ciao, ho necessità di popolare diverse dataGridView con migliaia e migliaia di record a partire da un database.
Al momento adotto un sistema che non tanto mi piace... prelevo i dati dal db, li metto in una datatable e successivamente li faccio visualizzare.
Sul pc in firma anche se ci sono oltre 20.000 righe il caricamento è istantaneo, ma basta andare a provare il software su un pc più "normale" ed un piccolo impuntamento iniziale si percepisce.

Altra nota dolente della mia soluzione è che non riempio la datatable in un thread in background, ciò comporta avere l'interfaccia del tutto bloccata fin quando non è andato il buon fine il prelievo dei dati.
Altro grossissimo problema è quando utilizzo un server mysql via internet per popolare il tutto, dove i tempi di attesa si prolungano per almeno 12-15 secondi durante i quali non si può fare nulla...

Avete qualche soluzione da proporre?

Grazie
Beh, la soluzione l'hai citata pure tu. Genera la DataTable tramite una query in background (E magari nel mentre che esegui la query visualizzi una barra di caricamento continua), quindi al termine di essa imposti la DataSource della tabella con il DataTable appena generato.

L'infrastruttura per i Thread in C# è una goduria, e l'introduzione degli operatori await e async ha reso il tutto di una banalità unica (anche se è sempre meglio darsi una bella letta alla gestione delle operazioni asincrone prima dell'introduzione di questi operatori, per capire davvero come funziona il tutto).

Ultima modifica di [Kendall] : 30-09-2013 alle 09:02.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 12:33   #3
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
Quote:
Originariamente inviato da [Kendall] Guarda i messaggi
Beh, la soluzione l'hai citata pure tu. Genera la DataTable tramite una query in background (E magari nel mentre che esegui la query visualizzi una barra di caricamento continua), quindi al termine di essa imposti la DataSource della tabella con il DataTable appena generato.

L'infrastruttura per i Thread in C# è una goduria, e l'introduzione degli operatori await e async ha reso il tutto di una banalità unica (anche se è sempre meglio darsi una bella letta alla gestione delle operazioni asincrone prima dell'introduzione di questi operatori, per capire davvero come funziona il tutto).
Ciao, ti ringrazio per la risposta.
Così facendo però avrò la datagrid popolata solo alla fine del prelievo dati, mi sarebbe piaciuto un qualcosa di progressivo..

Inviato dal mio GT-N7100 con Tapatalk 4
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 13:00   #4
totti240282
Senior Member
 
L'Avatar di totti240282
 
Iscritto dal: Feb 2002
Messaggi: 309
Anche se il vero Thread si fa senza quegli operatori, operazioni asincrone sono differenti da operazioni su altri Thread.
totti240282 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 13:50   #5
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da totti240282 Guarda i messaggi
Anche se il vero Thread si fa senza quegli operatori, operazioni asincrone sono differenti da operazioni su altri Thread.
Ni.

Non ho detto che gli operatori async e await SONO il multithreading, ma che l'introduzione degli stessi ha reso la gestione di più thread ancor più banale rispetto alla già semplificata struttura creata tramite i Task.

Il discorso poi è molto vasto e per nulla banale. Asincronia, Synchronization Context, generazione nuovi thread... Sono tutti argomenti che entrano in gioco, e appunto e tutto fuorchè banale.

Ultima modifica di [Kendall] : 30-09-2013 alle 14:00.
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 17:00   #6
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
L'utilizzo della modalità virtuale della datagridview potrebbe essere una soluzione?
Come faccio a popolare una dataGridView in virtual mode a partire da un DB?
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 18:07   #7
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
Intanto sto facendo delle prove per far si che il thread per il caricamento della dataTable venga eseguito in background però, sinceramente, non so come muovermi...

Al momento, nel form con la dataGrid, ho il richiamo ad un metodo da me creato:

Quote:
dataGrid.dataSource = CaricaDT(query, datatable);
Il metodo è così:
Quote:
Thread thread = new Thread(() => SvolgiDT(query, dt));
thread.Start();
while (thread.IsAlive)
{

}
return dt;
Quote:
dt.Clear();
try
{
Connection.Apri();
MySqlDataAdapter da = new MySqlDataAdapter(query, Connection.cnMySql);
da.Fill(dt);
Connection.Chiudi();
return dt;
}
catch (MySqlException)
{
MessageBox.Show("Errore!", MessageBoxButtons.OK, MessageBoxIcon.Error);
return null;
}
}
Il problema è che non ci ho concluso nulla così... la GUI si blocca quando carico la datagrid..
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 30-09-2013, 20:05   #8
Storti
Junior Member
 
Iscritto dal: Sep 2013
Messaggi: 24
Quote:
Originariamente inviato da rizzotti91 Guarda i messaggi
L'utilizzo della modalità virtuale della datagridview potrebbe essere una soluzione?
Per velocizzare la visualizzazione dei dati sì. Per il caricamento dal DB ovviamente no.
Storti è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 08:17   #9
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Se hai migliaia di record secondo me converrebbe comunque fare una paginazione della datagrid view... così facendo prelevi decisamente meno record da db diminuendo i tempi per visualizzare la pagina... io farei così Comunqe il threading rimana una soluzione valida ovviamente.
Oltretutto anche per l'utente che visualizza i dati sarebbe meglio, poi dipende dalle esigenze della tua applicazione.
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 08:24   #10
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Quote:
Originariamente inviato da Riordian Guarda i messaggi
Se hai migliaia di record secondo me converrebbe comunque fare una paginazione della datagrid view... così facendo prelevi decisamente meno record da db diminuendo i tempi per visualizzare la pagina... io farei così Comunqe il threading rimana una soluzione valida ovviamente.
Oltretutto anche per l'utente che visualizza i dati sarebbe meglio, poi dipende dalle esigenze della tua applicazione.
altra soluzione potrebbe essere il caricamento durante lo scrolling dei dati successivi, un po' come succede nei social network.
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 12:29   #11
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
Quote:
Originariamente inviato da Riordian Guarda i messaggi
altra soluzione potrebbe essere il caricamento durante lo scrolling dei dati successivi, un po' come succede nei social network.
Infatti é proprio questo che vorrei fare... E da quello che ho capito, la virtual mode serve proprio a questo. Inoltre vorrei che il caricamento avvenga comunque in un Thread separato, in modo da non bloccare mai la GUI. Qualcuno mi sa indicare come fare?

Inviato dal mio GT-N7100 con Tapatalk 4
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 14:05   #12
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
sono un po' a digiuno di windows form mi spiace, l'unica cosa che ti suggeisco è, se hai cos' tanti dati da prelevare da DB, di evitare di farlo con un unico accesso. Indipendentemente dal'utilizzo del thread o meno
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 01-10-2013, 23:58   #13
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Consiglio anche io la paginazione.
Oggi sono 20.000 record, e se fra un anno sono 200.000 ? Lasci che il thread scarichi per 5 minuti intasando il DB ?
Aggiungo pure che
- piu' record sono piu' memoria occupano, e quindi il programma comunque rallentera'.
- se l'utente inoltre decide di riordinare l'elenco a meta' scaricamento l'effetto non e' piacevole
- una scrollbar per scorrere 20k e passa record e' praticamente inutile, a meno di non dotare tutti di monitor 80" in verticale.

Il riempimento progressivo mentre si scrolla non mi piace, non si capisce mai bene quanti dati ci sono e come navigarli. Va bene per i social network perche' comunque si tratta sempre e solo di dati ordinati temporalmente di cui ti importano solo gli eventi piu' recenti. Nessuno si mette a scrollare la pagina di facebook per pescare un post di due mesi fa...

La soluzione paginata non sara' molto "kool" ma secondo me la piu' efficace.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2013, 19:52   #14
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Consiglio anche io la paginazione.
Oggi sono 20.000 record, e se fra un anno sono 200.000 ? Lasci che il thread scarichi per 5 minuti intasando il DB ?
Aggiungo pure che
- piu' record sono piu' memoria occupano, e quindi il programma comunque rallentera'.
- se l'utente inoltre decide di riordinare l'elenco a meta' scaricamento l'effetto non e' piacevole
- una scrollbar per scorrere 20k e passa record e' praticamente inutile, a meno di non dotare tutti di monitor 80" in verticale.

Il riempimento progressivo mentre si scrolla non mi piace, non si capisce mai bene quanti dati ci sono e come navigarli. Va bene per i social network perche' comunque si tratta sempre e solo di dati ordinati temporalmente di cui ti importano solo gli eventi piu' recenti. Nessuno si mette a scrollare la pagina di facebook per pescare un post di due mesi fa...

La soluzione paginata non sara' molto "kool" ma secondo me la piu' efficace.
Quoto tutto.. in effetti per una griglia la cosa migliore è la paginazione..
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db
Riordian è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2013, 22:14   #15
rizzotti91
Senior Member
 
L'Avatar di rizzotti91
 
Iscritto dal: May 2005
Città: Messina
Messaggi: 15654
Ok, è la cosa migliore, ma come si realizza?
__________________
CASE: Antec 900 - ALI: Enermax Pro82+ 525W - MOBO: Asus Z97I-Plus - CPU: i7 4770k @ 4.4 Ghz 1.22v - DISSI: Noctua U-14S - RAM: 2x8GB Corsair Vengeance LP @ 1866 Mhz - VGA: GTX 1070 ARMOR 8G OC - Monitor: Acer XF270HU - SSD: Samsung 850 EVO 500 GB
MacBook Pro Retina 15" 2018 - i7 6 core, Radeon Pro 560X, 512 GB SSD
rizzotti91 è offline   Rispondi citando il messaggio o parte di esso
Old 02-10-2013, 23:48   #16
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Stai usando windows forms ? (Non mi sembra che datagridview faccia parte di wpf, o no?)
Con C# per le gui ho usato solo silverlight per cui non ti posso dare un aiuto diretto con datagridview cmq l'idea di base e' questa:
una volta deciso il numero di record (N) da visualizzare alla volta, per visualizzare la pagina P devi prendere i record da (P-1)*N a P*N

Cpm SQL SERVER e' qualcosa tipo
Codice:
SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY ??? ) AS RowNum, *
          FROM      MyTable
          WHERE     SOME_CONDITION
        ) AS Result
WHERE   RowNum >= START_RECORD -- (P-1)*N
    AND RowNum < END_RECORD -- P*N
Insomma non fai altro che mostrare un sottoset limitato di tutta la tabella
Avrai bisogno di qualche pulsante per gestire la navigazione (pagina successiva pagina precedente) che non fa altro che impostare il nuovo numero di pagina e aggiornare di nuovo il contenuto della datagrid in base al nuovo intervallo. Lavoro un po' noioso ma non difficile.

Forse c'e' qualcosa di gia' pronto per le windows forms, non so, cmq se cerchi datagridview pagination so google trovi diversi esempi gia' pronti.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 03-10-2013, 10:03   #17
Riordian
Senior Member
 
L'Avatar di Riordian
 
Iscritto dal: Mar 2006
Città: Genova
Messaggi: 2457
Prova a vedere, come diceva anche marco, se il controllo offre qualcosa di già pronto. Ai tempi un controllo simile che ho usato con asp.net, lo aveva, si settava qualche proprietà del controllo e avevi tutto praticamente gratis. Dubito che non l'abbiano fatto anche per windows form o l'abbiano levato.
In caso contrario ho trovato questo esempio... vedi se ti è utile http://www.codeproject.com/Articles/...iew-in-WinForm
__________________
tag XBOX live Aldair74
Nick PSNRiordian
Affari conclusi con: Anf3t4m1n Krocca magomagnani amoredipippa mone_82 raszagale bizzy89 Andrew_db

Ultima modifica di Riordian : 03-10-2013 alle 10:11.
Riordian è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
L’ex CEO di Intel Gelsinger punta su una...
Techly, quattro nuovi supporti TV fra mo...
Mass Effect sacrificato per Star Wars: i...
Gemini, addio al copia e incolla per cor...
13 miliardi per un colpo di stato? NVIDI...
L'agente AI Wabi crea mini-app su misura...
Edge è il primo browser a supportare Acc...
L'IA di Firefox ora compila i moduli da ...
Tracking pixel nelle email: cosa cambia ...
La GeForce RTX 5080 da 24 GB potrebbe ar...
Apple mette alle strette OpenAI, la caus...
Xbox ancora in calo: ecco com'è a...
Car of the Year 2027: sette finaliste e ...
Google Beam cambia tutto: arrivano le vi...
Curry Barker, il regista di Obsession, p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:56.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v