2010-03-07 4 views
5

좋아, Telerik RadGrid (asp:Gridview과 유사)에서 사용자 지정 호출을 얻으려고하고 있지만 여전히 벽을 치고 있습니다. (내 질문의 첫 번째 부분은 here)GridView (RadGrid) 및 사용자 지정 호출

그래서 제안을 구현했습니다. 나는 레코드 수를

ALTER PROCEDURE [dbo].[bt_HealthMonitor_GetRecordCount] 

AS 
SET NOCOUNT ON 

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

를 얻기 위해 다음 저장된 프로 시저

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 

에게 그런 다음 다른 저장 프로 시저를 사용하여 내 RadGrid

에 바인딩 SQL에 LINQ를 사용하고 있습니다
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

에 저를 얻을 수 있나요?

+0

감사를 (당신이 총 개수를 반환하는 방법을 지정할 수 있습니다) 2. SelectCountMethod (당신이 데이터를 반환하는 방법을 지정할 수 있습니다) 1. 경우 SelectMethod 도움. 다른 사람들이 내 블로그에 내 연구 결과를 게시하여 http://dotnetblogger.com/post/2010/03/07/RadGrid-with-Custom-Paging-Sorting-Filtering을 찾고 사용하는 것이 좋습니다.aspx –

답변

14

총계에 몇 개의 레코드가 있는지 그리드에 알려줘야합니다. 그리드의 VirtualItemCount 속성을 설정하면됩니다 (총 레코드 수를 쿼리해야합니다).

자세한 내용은 documentation page을 보거나 online demo for custom paging을 참조하십시오.

+0

위의 질문을 편집했습니다. 나는 데모에서 "보이는 것"을 제안했지만, 여전히 "X"가 'RadGrid1.PageSize' 인 경우에만 "X"레코드를 얻습니다. –

+0

PS : 올바른 방향으로 나를 가르쳐 주셔서 감사합니다. 지금까지. –

+1

신경 쓰지 마라 ... 나는 그것을 해결했다. AllowCustomPageing = "true"' –

1

마틴은 VirtualItemCount와 관련하여 정확합니다. 이를 구현하는 가장 쉬운 장소는 NeedDataSource 이벤트입니다.

마지막 페이지의 레코드 수를 줄이려면 로직을 입력해야합니다. 즉, 페이지 당 5 개의 14 개의 레코드가있는 경우 논리가 마지막 호출에서 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 

당신은 데이터베이스에서 레코드를 검색하는 경우 데이터 액세스 호출의 일부로서이 작업을 수행 할 수 있습니다 : 나는 (일반 목록을 사용하여) 그것을 어떻게 여기

입니다 네가 간다.

관련 문제