GridView(RadGrid)和自定义分页

时间:2010-03-07 20:34:54

标签: telerik radgrid custom-paging

好的,所以我试图让我的自定义分页在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条记录。

我做错了什么?

3 个答案:

答案 0 :(得分:14)

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

有关详细信息,请查看documentation page或参阅online demo for custom paging

答案 1 :(得分:1)

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

显然,如果您只是在数据库中检索记录,那么您将希望在数据访问调用中执行此操作。

答案 2 :(得分:0)