2010-03-07 29 views
5

Ok, así que estoy tratando de obtener mi paginación personalizada en el Telerik RadGrid (similar al asp:Gridview), pero todavía estoy golpeando una pared. (la primera parte de mi pregunta fue respondida here)GridView (RadGrid) y Paginación personalizada

Así que he implementado la sugerencia. Yo uso el siguiente almacenados Proc

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 

Luego otro procedimiento almacenado para obtener el número de registros

ALTER PROCEDURE [dbo].[bt_HealthMonitor_GetRecordCount] 

AS 
SET NOCOUNT ON 

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

y estoy usando LINQ a SQL para unirse a mi 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 

Pero el problema soy experien cing es que la cuadrícula solo capta las primeras 10 filas (como se esperaba), pero necesito obtenerla para que reconozca que hay 200 filas en la tabla para que aparezcan los iconos de paginación.

Si utilizo la lista desplegable para mostrar 50 registros, a continuación, 50 se presenta, pero todavía no hay iconos de paginación para conseguirme a la siguiente 50.

¿Qué estoy haciendo mal?

+0

Gracias de nuevo por @ Martin la ayuda. Publiqué mis hallazgos en mi blog para que otras personas puedan encontrar y utilizar http://dotnetblogger.com/post/2010/03/07/RadGrid-with-Custom-Paging-Sorting-Filtering.aspx –

Respuesta

14

Debe indicar a la cuadrícula cuántos registros hay en total. Esto se hace estableciendo la propiedad de la cuadrícula VirtualItemCount (tendrá que consultar el número total de registros). Para obtener más información, consulte documentation page o consulte online demo for custom paging.

+0

He editado mi pregunta anterior. He hecho lo que "parece" que sean las sugerencias en la demo, pero todavía estoy consiguiendo solamente los mejores registros "X", donde "x" es el 'RadGrid1.PageSize' –

+0

PD: Gracias por señalarme en la dirección correcta hasta aquí. –

+1

No importa ... Lo resolví. Se olvidó de poner 'AllowCustomPageing =" true "' –

1

Martin tiene razón con respecto a VirtualItemCount. El lugar más fácil para implementar esto es en el evento NeedDataSource.

Recuerda que tendrás que poner algo de lógica para dar cuenta de menos registros en la última página. Eso significa que si tiene 14 registros con 5 por página, quiere asegurarse de que su lógica solo intente recuperar 4 registros en la última llamada.

Así es como lo hice (usando una lista genérica):

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 

Obviamente, usted querrá hacer esto como parte de su llamada de acceso a datos si sólo recuperar los registros de la base de datos a medida que avanza.

0

Puede implementar también utilizando ObjectDataSource.

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

es decir utilizando RadGrid con ObjectDataSource con la lógica de paginación es decir CustomPaging necesita implementado por su cuenta.

también ObjectDataSource tiene dos métodos 1. SelectMethod (donde se puede especificar el método que devuelve los datos) 2. SelectCountMethod (donde se puede especificar el método que devuelve el recuento total)

Cuestiones relacionadas