【问题标题】:Paging with the Telerik MVC grid when using a sproc使用存储过程时使用 Telerik MVC 网格进行分页
【发布时间】:2011-03-25 05:34:35
【问题描述】:

文档只显示了如何绑定到 IEnumerable(它使用 linq 进行分页和排序)......但我需要反对 sproc,因为事实证明我正在使用 linq 表达查询有点慢。

任何人都可以提供任何指导或指示,说明什么是最好的方法吗?

【问题讨论】:

    标签: stored-procedures pagination telerik telerik-grid telerik-mvc


    【解决方案1】:

    您需要使用custom binding。链接的示例显示了如何获取当前页面。

    【讨论】:

      【解决方案2】:

      您是在谈论如何将 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 
      

      【讨论】:

      • 这是两个问题的混合体。问题是如何实现分页以便它与telerik网格一起工作 ...就目前而言,我看到的所有演示都只使用linq,所以大概它使用linq方法处理排序和分页.这是分页存储过程的一个很好的例子......谢谢,现在问题的下一部分就像你提到的那样,如何绑定它以便网格将页码和页面大小传达给存储过程:-)
      【解决方案3】:

      RoadWarrior 为您提供了一个很好的分页存储过程示例,并且 korchev 为您指出了自定义绑定。

      实际上,只要您以 IEnumerable 的形式获取数据,数据的来源就无关紧要,因此只需编写数据访问代码,然后在自定义绑定之后将数据放入 List容易。

      【讨论】:

        猜你喜欢
        • 2012-10-03
        • 2013-07-22
        • 2014-05-21
        • 2015-11-18
        • 2012-09-10
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多