DatagridView che visualizza i dati in forma paginata

giovedì 25 marzo 2010 - 16.45

aldopoli Profilo | Newbie

Salve a tutti,

ho una Windows Application che mi visualizza i dati di una ricerca in un DataGridView.

Siccome ad ogni ricerca visualizzo una mole imponente di dati (dai 500 mila in più) ed i tempi di visualizzazioni dei dati superano il minuto e questo non è tollerabile, vorrei effettuare una visualizzazione paginata dei dati a 1000 alla volta cosicchè da ridurre i tempi di ricerca, visualizzando i dati 1000 per ogni scheda.

Scenario desiderato:

ricerca una parola e senza paginazione otterrei, per esempio, 123456 record;
con la ricerca a 1000 alla volta, effettuerei una ricerca dei primi 1000 record alla prima volta (Scheda N.1), poi passerei alla Scheda N.2 che di volta in volta mi farebbe la query sui record da 1001 a 2000, ecc.ecc.

Esiste un tale metodo?

Grazie a tutti

Saluti

Gho5t Profilo | Junior Member

non credo di aver capito la tua domanda... il tuo problema è della query che devi eseguire (TOP con l'Sql Server e LIMIT con il Mysql) oppure dell'evento che devi intercettare quando cambi schema per fargli eseguire la nuova query che ti restituisce i nuovi risultati?

aldopoli Profilo | Newbie

>non credo di aver capito la tua domanda... il tuo problema è
>della query che devi eseguire (TOP con l'Sql Server e LIMIT con
>il Mysql) oppure dell'evento che devi intercettare quando cambi
>schema per fargli eseguire la nuova query che ti restituisce
>i nuovi risultati?

Salve,

supponiamo di essere su SQL Server.

Esiste una stored procedure che mi consente di visualizzare tutti i 123456 dati, per esempio, a 1000 alla volta?

Poi passerò alla Windows Application.

Grazie

Saluti

Aldopoli

Gho5t Profilo | Junior Member

Quello che pensavo io era, piuttosto, far prendere alla griglia solo le 1000 righe necessarie e dopo intercettare l'evento di quando cambia scheda e fargli fare un'altra query sql per fargli prendere le seguenti 1000 righe...
in pratica nella query che utilizzi per caricare i dati nella griglia devi impostare il TOP 1000 per prendere solo le prime 1000 righe:
query = "SELECT TOP 1000 * FROM Tua_Tabella ORDER BY ID"
ovviamente dopo tu la modificherai con le eventuali WHERE che ci potrebbero essere...

poi quando cambi la scheda, intercetti l'evento del cambio della scheda (non so che significa "scheda" e quale griglia utilizzi, quindi non posso aiutarti più di tanto) e selezioni le seguenti 1000 mettendo nel WHERE della query la condizione di non prendere le vecchie righe appena visualizzate [nell'esempio successivo presumo che la variabile ID sia l'ID dell'ultima riga visualizzata nella griglia (cioè la 1000° riga)]:
Dim id as integer = Numero_1000°_Riga query = "SELECT TOP 1000 * FROM Tua_Tabella WHERE ID > " & id & " ORDER BY ID"
ovviamente nelle condizioni dell'ultimo esempio, dovrai inserire le stesse condizioni della query iniziale... altrimenti i risultati non corrisponderebbero...

così facendo carichi solo 1000 righe per volta dal Database e non carichi mille miliardi di righe tutte insieme... dovrebbe fare al caso tuo perché dovrebbe aumentare le performance...

aldopoli Profilo | Newbie

>Quello che pensavo io era, piuttosto, far prendere alla griglia
>solo le 1000 righe necessarie e dopo intercettare l'evento di
>quando cambia scheda e fargli fare un'altra query sql per fargli
>prendere le seguenti 1000 righe...
>in pratica nella query che utilizzi per caricare i dati nella
>griglia devi impostare il TOP 1000 per prendere solo le prime
>1000 righe:
>
>query = "SELECT TOP 1000 * FROM Tua_Tabella ORDER BY ID"
>
>ovviamente dopo tu la modificherai con le eventuali WHERE che
>ci potrebbero essere...
>
>poi quando cambi la scheda, intercetti l'evento del cambio della
>scheda (non so che significa "scheda" e quale griglia utilizzi,
>quindi non posso aiutarti più di tanto) e selezioni le seguenti
>1000 mettendo nel WHERE della query la condizione di non prendere
>le vecchie righe appena visualizzate [nell'esempio successivo
>presumo che la variabile ID sia l'ID dell'ultima riga visualizzata
>nella griglia (cioè la 1000° riga)]:
>
>Dim id as integer = Numero_1000°_Riga
>query = "SELECT TOP 1000 * FROM Tua_Tabella WHERE ID > " &
>id & " ORDER BY ID"
>
>ovviamente nelle condizioni dell'ultimo esempio, dovrai inserire
>le stesse condizioni della query iniziale... altrimenti i risultati
>non corrisponderebbero...
>
>così facendo carichi solo 1000 righe per volta dal Database e
>non carichi mille miliardi di righe tutte insieme... dovrebbe
>fare al caso tuo perché dovrebbe aumentare le performance...


Grazie, vedrò cosa riesco a fare!

Aldopoli
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5