jueves, 11 de octubre de 2007

Paginacion Mixta Personalizada... (Asp.net Datagrid)

Hace unos dias un amigo mio lector fiel de este blog me hizo una pregunta... ¿Cual es la forma mas eficiente de realizar paginaciones en las paginas Asp.net? Bien como todos ya conocemos existen algunos controles como el Datagrid que tiene su paginacion propia, sin embargo no soy muy partidario de la eficiencia de este control por que si bien es cierto se le entrega un conjunto de resultados y el internamente atravez del metodo Page_SelectionChange realiza la paginacion pero del origen completo asignado.

Sin embargo existe una forma mucho mas eficiente, particularmente la uso por que consume pocos recursos, y nos permite hacer mucho mas ligera la pagina, es la tecnica de control tu origen por sTored Procedures, asi como la cantidad de paginas a mostrar.

Esto significa que si tengo una tabla con 25 mil registros, no cargare los 25 mil a la vez, si no que traere el conjunto de resultados por bloques definidos en el Stored Procedure.

Por ejemplo:

CREATE DATABASE CustomPagingGO
Use CustomPagingGO
CREATE TABLE Products ( ProductID int IDENTITY (1, 1) NOT NULL , ProductName varchar (50) NOT NULL ) ON [PRIMARY]GO
CREATE PROCEDURE GetProductsByPage@PageNumber int,@PageSize intAS CREATE TABLE #TempProducts ( ID int IDENTITY PRIMARY KEY, ProductID int, ProductName varchar(50), )
-- fill the temp table with all the products for the -- specified products retrieved from the Products table INSERT INTO #TempProducts ( ProductID, ProductName ) SELECT ProductID, ProductName FROM Products
-- declare two variables to calculate the -- range of records to extract for the specified page DECLARE @FromID int DECLARE @ToID int
-- calculate the first and last ID of the range of topics we need SET @FromID = ((@PageNumber - 1) * @PageSize) + 1 SET @ToID = @PageNumber * @PageSize
-- select the page of records SELECT ProductID, ProductName FROM #TempProducts WHERE ID >= @FromID AND ID <= @ToIDGO



Aqui les dejo el codigo de Referencia espero que les ayuden a mejorar la eficiencia de sus Paginas....


Saludos,
Daniel Lazarte

No hay comentarios: