2010-03-07 15 views
5

Ok, quindi sto cercando di ottenere il mio cercapersone personalizzato su Telerik RadGrid (simile allo asp:Gridview), ma sto ancora colpendo un muro. (la prima parte della mia domanda è stata risposta here)GridView (RadGrid) e Paging personalizzato

Quindi ho implementato il suggerimento. Io uso il seguente stored 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 

Poi un altro stored procedure per ottenere il conteggio dei record

ALTER PROCEDURE [dbo].[bt_HealthMonitor_GetRecordCount] 

AS 
SET NOCOUNT ON 

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

e sto usando LINQ to SQL di legarsi alla mia 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 

Ma il problema sono esperien Cinghia è che la griglia afferra solo le prime 10 righe (come previsto), ma ho bisogno di farlo in modo che riconosca che ci sono 200 righe nella tabella in modo che le icone di paging vengano visualizzate.

Se uso il DropDownList per visualizzare 50 record, poi 50 presentarsi, ma ancora nessuna icona di paging di farmi la prossima 50.

Che cosa sto facendo di sbagliato?

+0

Grazie ancora @ Martin per l'aiuto. Ho pubblicato le mie scoperte sul mio blog affinché altre persone trovino e usino http://dotnetblogger.com/post/2010/03/07/RadGrid-with-Custom-Paging-Sorting-Filtering.aspx –

risposta

14

È necessario indicare alla rete quanti record ci sono in totale. Ciò avviene impostando la proprietà della griglia VirtualItemCount (sarà necessario eseguire una query sul numero totale di record).

Per ulteriori dettagli, consultare documentation page o fare riferimento a online demo for custom paging.

+0

Ho modificato la mia domanda sopra. Ho fatto quello che "sembra" essere i suggerimenti nella demo, ma sto ancora ottenendo solo i primi record "X" dove "X" è il 'RadGrid1.PageSize' –

+0

PS: grazie per avermi indicato nella giusta direzione finora. –

+1

Nevermind ... l'ho risolto. Hai dimenticato di inserire 'AllowCustomPageing =" true "' –

1

Martin ha ragione riguardo a VirtualItemCount. Il modo più semplice per implementare questo è nell'evento NeedDataSource.

Ricordare che è necessario inserire un po 'di logica per tenere conto di un minor numero di record nell'ultima pagina. Ciò significa che se hai 14 record con 5 per pagina, vuoi assicurarti che la tua logica cerchi solo di recuperare 4 record nell'ultima chiamata.

Ecco come ho fatto (usando un elenco generico):

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 

Ovviamente, si vorrà fare questo come parte della vostra chiamata accesso ai dati Se si desidera recuperare solo i record dal database Appena vai.

0

È possibile implementare anche utilizzando ObjectDataSource.

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

cioè utilizzando RadGrid con ObjectDataSource con la logica CustomPaging cioè paging ha la necessità di attuare da soli.

anche ObjectDataSource ha due metodi 1. SelectMethod (cui è possibile specificare il metodo che restituisce i dati) 2. SelectCountMethod (cui è possibile specificare il metodo che restituisce il conteggio totale)