【问题标题】:Paging in GridView using SqlDataSource使用 SqlDataSource 在 GridView 中进行分页
【发布时间】:2009-05-12 18:53:32
【问题描述】:

我有一个 GridView,它在 DataSet 模式下从 SqlDataSource 访问数据。我启用了分页,它可以工作,但在大型数据集上,提取数据需要非常长的时间。

似乎 SqlDatSource 正在提取所有数据,然后在 UI 级别对其进行分页。这显然是一个糟糕的解决方案。我查看了Tips on speeding up a SqlDataSource?,它似乎在同一个主题上——看起来我需要在我的 SELECT 语句中实现一些分页代码,我只是不知道该怎么做。如果必须,我不反对将其拉入 SProc,但将 SELECT 命令留在 SqlDataSource 中会更好。

我知道 MySQL 有 LIMIT X,Y(其中 X 是要检索的行数,Y 是偏移量)。 TOP好像没有做同样的事情,我也不知道如何将GridView中的分页信息获取到SqlDataSource中。

这是最好的方法吗? (如果是这样,我从哪里开始?)或者有没有更好的方法从 GridView 中的 SqlDataSource 获得有效的分页?

(如果重要,我会使用 C#,但我认为不应该。)

谢谢。

【问题讨论】:

    标签: .net sql-server pagination


    【解决方案1】:

    ROW_NUMBER() 是你的朋友,在这个例子中使用:

    DECLARE @test TABLE (LastName varchar(25),FirstName varchar(25))
    INSERT INTO @test values ('Jones','Billy')
    INSERT INTO @test values ('Jones','Suzie')
    INSERT INTO @test values ('Jones','Beth')
    INSERT INTO @test values ('Jones','Ron')
    INSERT INTO @test values ('Jones','Dan')
    INSERT INTO @test values ('Smith','Abby')
    INSERT INTO @test values ('Smith','Debbie')
    INSERT INTO @test values ('Smith','Joe')
    INSERT INTO @test values ('Smith','Dan')
    INSERT INTO @test values ('Brown','Matt')
    INSERT INTO @test values ('Brown','Rob')
    
    ;WITH TestRank AS
    (
        select
            LastName,FirstName, row_number() over(order by LastName,FirstName) AS RowNumber
            from @test
    )
    SELECT
        LastName,FirstName
        FROM TestRank
        WHERE RowNumber>=3 AND RowNumber<=5
        ORDER BY RowNumber
    

    让应用程序跟踪页面上显示的内容。如果要在页面上显示 10 行返回 1-11,则显示 1-10,如果 rowcount==11 则显示“下一个”链接。

    【讨论】:

    • +1 表示正确的方向,更大的问题是如何创建动态包装器以提供通用分页..
    猜你喜欢
    • 2012-01-04
    • 2015-12-01
    • 2012-12-05
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2011-08-26
    • 2013-04-29
    相关资源
    最近更新 更多