4

該文檔僅顯示如何綁定到IEnumerable(它使用linq進行頁面排序)...但我需要對照sproc,因爲表達查詢我是與linq一起工作證明有點慢。在使用sproc時使用Telerik MVC網格進行分頁

任何人都可以提供任何指導方針或指示什麼是最好的方法來做到這一點?

回答

6

您需要使用custom binding。鏈接的示例顯示如何獲取當前頁面。

3

您是否在談論如何將Telerik網格綁定到存儲過程發出的結果集,或者如何在存儲過程中實現分頁?你的問題並不清楚。

以下T-SQL存儲過程是非常有效的執行分頁。 SQL優化器可以非常快速地找到第一個ID。將此與ROWCOUNT結合使用,您可以獲得既節省CPU又節省讀取的方法。對於具有大量行的表,它肯定會擊敗我見過的使用臨時表或表變量的任何方法。

CREATE PROCEDURE dbo.PagingTest 
(
    @PageNumber int, 
    @PageSize int 
) 
AS 

DECLARE @FirstId int, @FirstRow int 

SET @FirstRow = ((@PageNumber - 1) * @PageSize) + 1 
SET ROWCOUNT @FirstRow 

-- Add check here to ensure that @FirstRow is not 
-- greater than the number of rows in the table. 

SELECT @FirstId = [Id] 
FROM  dbo.TestTable 
ORDER BY [Id] 

SET ROWCOUNT @PageSize 

SELECT * 
FROM  dbo.TestTable 
WHERE [Id] >= @FirstId 
ORDER BY [Id] 

SET ROWCOUNT 0 
GO 
+0

這是兩個問題的混合。問題是如何實現分頁*,以便它可以與telerik網格一起工作* ...因爲它的立場,所有我見過的演示只是使用linq,所以大概它使用linq方法來處理排序和分頁。這是分頁存儲過程的一個很好的例子...謝謝,現在問題的下一部分就像你提到的那樣,如何綁定它,以便網格將頁碼和頁面大小傳遞給sproc :-) – 2010-08-04 17:45:46

0

RoadWarrior爲您提供了一個很好的分頁存儲示例,並且korchev指出了您對自定義綁定的需求。

實際上,只要您以IEnumerable的形式獲取數據,數據來自哪裏就無關緊要,因此只需寫入數據訪問代碼,然後在自定義綁定之後將數據輸出到List中放輕鬆。