【问题标题】:GridView (RadGrid) and Custom PagingGridView (RadGrid) 和自定义分页
【发布时间】:2011-01-24 18:25:04
【问题描述】:

好的,所以我正在尝试在 Telerik RadGrid 上进行自定义分页(类似于asp:Gridview),但我仍然碰壁。 (我的问题的第一部分已回答here

所以我已经实施了这个建议。我使用以下存储过程

ALTER PROCEDURE [dbo].[bt_HealthMonitor_GetAll]
(
    @StartRowIndex      int,
    @MaximumRows        int
)

AS
SET NOCOUNT ON

Select
RowNum,
[ID],
[errEx],
[errURL],
[errSource],
[errUser],
[errMessage],
[errIP],
[errBrowser],
[errOS],
[errStack],
[errDate],
[errNotes]
From
(
Select
    [ID],
    [errEx],
    [errURL],
    [errSource],
    [errUser],
    [errMessage],
    [errIP],
    [errBrowser],
    [errOS],
    [errStack],
    [errDate],
    [errNotes],
    Row_Number() Over(Order By [ID]) As RowNum
    From dbo.[bt_HealthMonitor] t
) 
As DerivedTableName
Where RowNum Between @StartRowIndex And (@StartRowIndex + @MaximumRows)

Order By [ID] Desc

然后另一个存储过程来获取记录数

ALTER PROCEDURE [dbo].[bt_HealthMonitor_GetRecordCount]

AS
SET NOCOUNT ON

return (Select Count(ID) As TotalRecords From bt_HealthMonitor)

我正在使用 LINQ to SQL 绑定到我的 RadGrid

Protected Sub RadGrid1_NeedDataSource(ByVal source As Object, ByVal e As Telerik.Web.UI.GridNeedDataSourceEventArgs)

    Dim startRowIndex As Integer = (RadGrid1.CurrentPageIndex * RadGrid1.PageSize)
    Dim maximumRows As Integer = RadGrid1.PageSize

    Dim HealthMonitorDC As New DAL.HealthMonitorDataContext

    Dim r = HealthMonitorDC.bt_HealthMonitor_GetAll(startRowIndex, maximumRows)
    RadGrid1.DataSource = r
End Sub

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
    Dim HealthMonitorDC As New DAL.HealthMonitorDataContext
    Dim count = HealthMonitorDC.bt_HealthMonitor_GetRecordCount()
    RadGrid1.MasterTableView.VirtualItemCount = count.ReturnValue
    RadGrid1.VirtualItemCount = count.ReturnValue
End Sub

但我遇到的问题是网格只抓取前 10 行(如预期的那样),但我需要获取它,以便它能够识别表中有 200 行,以便显示分页图标.

如果我使用下拉列表显示 50 条记录,则显示 50 条,但仍然没有分页图标让我进入下一个 50 条。

我做错了什么?

【问题讨论】:

标签: telerik radgrid custom-paging


【解决方案1】:

您需要告诉网格总共有多少条记录。这是通过设置网格的VirtualItemCount 属性来完成的(您必须查询总记录数)。

详情请查看documentation page或参考online demo for custom paging

【讨论】:

  • 我在上面编辑了我的问题。我已经完成了演示中的“看起来”建议,但我仍然只获得顶部的“X”记录,其中“X”是RadGrid1.PageSize
  • 没关系...我解决了。忘了放AllowCustomPageing="true"
  • 你是明星,为我节省了至少一个小时来编写自定义数据源来处理这个问题,但不确定它是否有效,谢谢
【解决方案2】:

Martin 关于 VirtualItemCount 是正确的。实现这一点最简单的地方是在 NeedDataSource 事件中。

请记住,您需要在其中添加一些逻辑以减少最后一页上的记录。这意味着,如果您有 14 条记录,每页 5 条,您需要确保您的逻辑仅尝试在最后一次调用时检索 4 条记录。

我是这样做的(使用通用列表):

    If gridRecords.Count < (grid.pagesize * (grid.pageIndex + 1)) Then
        gridRecords.GetRange(grid.pageIndex * grid.pagesize, gridRecords.Count - (grid.pagesize * grid.pageIndex))
    Else
        gridRecords.GetRange(grid.pageIndex * grid.pagesize, grid.pagesize)
    End If

显然,如果您只是在执行过程中从数据库中检索记录,那么您会希望将此作为数据访问调用的一部分。

【讨论】:

    【解决方案3】:

    您也可以使用 ObjectDataSource 来实现。

    http://www.unboxedsolutions.com/sean/archive/2005/12/28/818.aspx

    即将 RadGrid 与 ObjectDataSource 和 CustomPaging 一起使用,即分页逻辑需要您自己实现。

    ObjectDataSource 也有两个方法 1. SelectMethod(可以指定返回数据的方法) 2. SelectCountMethod(可以指定返回总计数的方法)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多