nessuna fesseria, il problema è comune a tanti.
Per quanto ne so io, non hai molte possibilità di migliorare la situazione utilizzando i contolli asp.net classici.
Puoi invece usare la paginazione lato server modificando la query ed aggiungendo uno o più parametri per farti ritornare solo le righe che ti interessano (esempio start e num)
Quello che puoi sfruttare è l'ObjectDataSource che ti da una mano a passare questi parametri alla tua query (o StoredProcedure).
Qui un buon esempio:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.maximumrowsparametername.aspx
Un'altra cosa che puoi fare è utilizzare Linq. Questa libreria ti permette di creare query non SQL ma sugli oggetti Entity che vengono create. Ci penserà lui a trasformare le interrogazioni in query SQL ottimizzate. Esempio:
from p in Products
orderby p.ProductName
select p
è una interrogazione Linq che viene trasformata in una normalissima query select from.
ma guarda l'esempio successivo:
(from p in Products
orderby p.ProductName
select p).Skip(20).Take(20)
__________________________
-- Region Parameters
DECLARE @p0 Int = 20
DECLARE @p1 Int = 20
-- EndRegion
SELECT [t1].[ProductID], [t1].[ProductName], [t1].[SupplierID], [t1].[CategoryID],
[t1].[QuantityPerUnit], [t1].[UnitPrice], [t1].[UnitsInStock], [t1].[UnitsOnOrder],
[t1].[ReorderLevel], [t1].[Discontinued]
FROM (
SELECT ROW_NUMBER() OVER (ORDER BY [t0].[ProductName]) AS [ROW_NUMBER],
[t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID],
[t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder],
[t0].[ReorderLevel], [t0].[Discontinued]
FROM [Products] AS [t0]
) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN @p0 + 1 AND @p0 + @p1
ORDER BY [t1].[ROW_NUMBER]
anche se non ti va di usare Linq, puoi prendere supunto su come fare la paginazione lato server DB.
Ciao e buon lavoro
____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.