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...