2010-01-08 15 views
1

我想要從sqlserver表中的gridview綁定atleast 30,000條記錄。我想用網格視圖一次綁定50條記錄。網格也有分頁,當我點擊下一頁時,下一個50條記錄應該顯示,另一個下一頁點擊50條記錄。我們如何優化gridview中的記錄?

我該如何優化這件事。我希望如果30,000條記錄具有約束力,那麼網格應該作爲綁定的50條記錄工作。

謝謝,

+1

Deepak,任何你有6個其他問題,但沒有接受任何答案的原因的任何理由? – Tarydon 2010-01-08 08:41:25

+0

@亨克:哦,對不起! – 2010-01-08 08:42:16

+0

你想進一步優化它的任何理由?您已經在使用優化提取和顯示的分頁機制。 – A9S6 2010-01-08 08:44:50

回答

0

在SQL服務器上處理分頁效率更高。如果您只是使用gridview處理分頁,或者甚至是在本地運行的數據源,則它會將所有30,000條記錄從數據庫加載到前端,然後檢索頁面的記錄。

0

您可以將GridView綁定到LinqDataSource控件。據我所知當它處理分頁時,它只請求數據庫中的可見行,而不是整個表。關於如何將GridView綁定到LinqDataSource here有一篇很好的文章。

1

GridView綁定到ObjectDataSource,並在兩者上啓用分頁。

在SQL方面,使用CTE來選擇所需的行。例如:

;WITH MyCTE ([row], [Item]) AS (
    SELECT ROW_NUMBER() OVER (ORDER BY Id) [row], [Item] 
     FROM SourceTable 
    ) 
    SELECT [row], [Item] 
     FROM MyCTE 
     WHERE [row] BETWEEN @startrow AND @startrow + @pagesize - 1 

萬一有幫助,我給的是如何做到這一點在我的書中,使用異步I/O以及包括代碼的完整的高性能例如:Ultra-Fast ASP.NET

1

其他人建議的方法有很多。 我想一些更添加到

一)從後端處理(這是我如何我當前的項目做)

--Usage : USP_DataListing 0,12 
ALTER PROCEDURE [dbo].[USP_DataListing] 
    -- Add the parameters for the stored procedure here 
    (@StartIndex INT, @ItemsToDisplay INT) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    DECLARE @EndIndex INT 
    SET @StartIndex = @StartIndex * @ItemsToDisplay 
    SET @EndIndex = @StartIndex + @ItemsToDisplay 

    BEGIN 
     SELECT 
      SlNo 
      ,Column(s) 
      FROM (
     SELECT 
     ROW_NUMBER() OVER (ORDER BY GETDATE() DESC) AS SlNo 
       ,i.Column(s)     
      FROM dbo.tblName i)X 
      WHERE X.SlNo BETWEEN @StartIndex+1 AND @EndIndex 
    END 

2)如果你正在使用的dotnet版本3.0+你可以採取LINQ的方法Take() and Skip()方法