5

さて、Telerik 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)

そして、私はLINQtoSQLを使用して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行があることを認識できるように取得する必要があります。

ドロップダウンリストを使用して50レコードを表示すると、50が表示されますが、次の50に移動するためのページングアイコンが表示されません。

私は何が間違っているのですか?

4

3 に答える 3

14

グリッドに合計でいくつのレコードがあるかを伝える必要があります。これは、グリッドのVirtualItemCountプロパティを設定することによって行われます(レコードの総数を照会する必要があります)。

詳細については、ドキュメントページを参照するか、カスタムページングのオンラインデモを参照してください。

于 2010-03-07T20:52:46.827 に答える
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

明らかに、データベースからレコードを取得するだけの場合は、データアクセス呼び出しの一部としてこれを実行することをお勧めします。

于 2010-04-27T18:13:54.760 に答える
0

ObjectDataSourceを使用して実装することもできます。

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

つまり、CustomPagingを使用してObjectDataSourceでRadGridを使用します。つまり、ページングロジックを独自に実装する必要があります。

また、ObjectDataSourceには2つのメソッドがあります。1。SelectMethod(データを返すメソッドを指定できます)2。SelectCountMethod(合計カウントを返すメソッドを指定できます)

于 2010-07-26T11:42:48.797 に答える