GridView (Radgrid) и пользовательский пейджинг
-
25-09-2019 - |
Вопрос
Хорошо, так что я пытаюсь получить свой пользовательский пейджинг, идущий на телерик Radgrid (похоже на asp:Gridview
), но я все еще бьет на стену. (Первая часть моего вопроса ответила здесь)
Поэтому я внедрил предложение. Я использую следующие хранимые программы
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 для 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 строк, чтобы появиться значки подкачки.
Если я использую DropDownList, чтобы отобразить 50 записей, то 50 отображаются, но до сих пор нет значков подкачки, чтобы заставить меня до следующих 50.
Что я делаю неправильно?
Решение
Вам нужно сообщить сетку, сколько записей в общей сложности. Это сделано путем установки сетки VirtualItemCount
Собственность (вам придется запрашивать общее количество записей).
Подробнее, посмотрите на Страница документации или обратитесь к онлайн демонстрация для пользовательских пейджинга.
Другие советы
Мартин прав в отношении VirtualteMcount. Самое простое место для реализации этого происходит в мероприятии по желанию.
Помните, что вам нужно будет поместить туда-нибудь логику, чтобы объяснить меньше записей на последней странице. Это означает, что если у вас есть 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
Очевидно, вы захотите сделать это как часть вашего вызова доступа к данным, если вы только извлекаете записи из базы данных, как вы идете.
Вы можете реализовать также использовать ObjectDataSource.
http://www.unboxedsolutions.com/sean/chive/2005/12/28/818.aspx.
Т.е. с использованием Radgrid с ObjectDataSource с навлечениями, т.е. логикой подкачки необходимо реализовать самостоятельно.
Также ObjectDataSource имеет два метода 1. SelectMethod (где вы можете указать метод, который возвращает данные) 2. ВыборCountMethod (где вы можете указать метод, который возвращает общий счет)