2010-03-07 35 views
5

Ok, vì vậy tôi đang cố gắng để phân trang tùy chỉnh của mình xuất hiện trên Telerik RadGrid (tương tự như asp:Gridview), nhưng tôi vẫn đang va vào tường. (phần đầu tiên của câu hỏi của tôi đã được trả lời here)GridView (RadGrid) và Phân trang tùy chỉnh

Vì vậy, tôi đã thực hiện đề xuất. Tôi sử dụng Stored Proc sau

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 

Sau đó, một thủ tục lưu trữ để có được số lượng kỷ lục

ALTER PROCEDURE [dbo].[bt_HealthMonitor_GetRecordCount] 

AS 
SET NOCOUNT ON 

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

Và tôi đang sử dụng LINQ to SQL để ràng buộc vào RadGrid tôi

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 

Nhưng vấn đề tôi gặp phải cing là lưới chỉ lấy 10 hàng đầu tiên (như mong đợi) nhưng tôi cần lấy nó để nó nhận ra rằng có 200 hàng trong bảng sao cho các biểu tượng phân trang xuất hiện.

Nếu tôi sử dụng DropDownList để hiển thị 50 hồ sơ, sau đó 50 xuất hiện, nhưng vẫn không có biểu tượng phân trang để làm cho tôi tiếp theo 50.

Tôi đang làm gì sai?

+0

Cảm ơn một lần nữa @ Martin cho sự giúp đỡ. Tôi đã đăng các phát hiện của mình lên blog của mình để những người khác hy vọng tìm và sử dụng http://dotnetblogger.com/post/2010/03/07/RadGrid-with-Custom-Paging-Sorting-Filtering.aspx –

Trả lời

14

Bạn cần nói cho lưới biết tổng số bản ghi có bao nhiêu. Điều này được thực hiện bằng cách thiết lập thuộc tính VirtualItemCount của lưới (bạn sẽ phải truy vấn tổng số bản ghi).

Để biết chi tiết, hãy xem documentation page hoặc tham khảo online demo for custom paging.

+0

Tôi đã chỉnh sửa câu hỏi của mình ở trên. Tôi đã làm những gì "trông" là những gợi ý trong bản demo, nhưng tôi vẫn chỉ nhận được các bản ghi "X" hàng đầu, trong đó "X" là "RadGrid1.PageSize' –

+0

PS: cảm ơn đã chỉ cho tôi đúng hướng cho đến nay. –

+1

Nevermind ... Tôi đã giải quyết nó. Quên đặt 'AllowCustomPageing =" true "' –

1

Martin chính xác về VirtualItemCount. Nơi dễ nhất để thực hiện điều này là trong sự kiện NeedDataSource.

Hãy nhớ rằng bạn sẽ cần đặt một số logic vào đó để tính toán ít bản ghi hơn trên trang cuối cùng. Điều đó có nghĩa rằng nếu bạn có 14 bản ghi với 5 mỗi trang, bạn muốn đảm bảo rằng logic của bạn chỉ cố gắng truy xuất 4 bản ghi trên cuộc gọi cuối cùng.

Đây là cách tôi đã làm nó (sử dụng một danh sách chung):

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 

Rõ ràng, bạn sẽ muốn làm điều này như là một phần của cuộc gọi truy cập dữ liệu của bạn nếu bạn chỉ lấy các bản ghi từ cơ sở dữ liệu khi bạn đi.

0

Bạn cũng có thể triển khai bằng cách sử dụng ObjectDataSource.

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

tức là sử dụng RadGrid với ObjectDataSource với CustomPaging tức là Paging lý cần thực hiện một mình.

Cũng ObjectDataSource có hai phương pháp 1. SelectMethod (Nơi bạn có thể chỉ định các phương pháp mà trả về dữ liệu) 2. SelectCountMethod (Nơi bạn có thể chỉ định các phương pháp mà trả về Đếm tổng số)

Các vấn đề liên quan