Skip to main content

Data Paging

  • 4 minutes to read

This topic describes the concept of data paging, including an overview of the paging functionality, appearance customization, as well as how to navigate pages on the server and client sides.

Data Paging Overview

By default, GridView automatically splits content across multiple pages and provides end-users with an embedded page navigation UI - Pager.

MVC_Grid_FN_PagerItems

The built-in pager enables end-users to navigate through GridView data. It consists of the following navigation buttons: Next, Last, Previous, First and All. It also includes an indicator that displays the current page number and the total number of pages, and a page size item allowing you to specify the maximum number of rows that can be displayed within a page. To access and customize pager settings, use the GridViewSettings.SettingsPager property.

To disable page navigation and display all rows within the grid, set the ASPxGridViewPagerSettings.Mode (via GridViewSettings.SettingsPager.Mode) property to GridViewPagerMode.ShowAllRecords.

Appearance Customization

The pager can be displayed above or below the rows, or on both sides. Use the ASPxGridPagerSettings.Position (via GridViewSettings.SettingsPager.Position) property to specify the pager’s position within the GridView.

cdPagingTopBoth

The maximum number of rows that can be displayed within a page can be accessed using the ASPxGridViewPagerSettings.PageSize (via GridViewSettings.SettingsPager.PageSize) property.

The GridView‘s look and feel can be customized with Templates. A template is a set of HTML elements and ASP.NET MVC extensions that define the layout for a particular element within the ASP.NET MVC extension (e.g., a pager). When the extension runs in the web page, template content is rendered in place of the default HTML for the extension.

Example

The code sample below demonstrates how to implement a custom pager using the templates.

Partial View code:

@Html.DevExpress().GridView(settings => {
    settings.Name = "GridView";
    // ...
    settings.SettingsPager.PageSize = 5;
    settings.SetPagerBarTemplateContent(c => {
        // Render Prev button
        ViewContext.Writer.Write("<div style=\"float:left;padding-right:20px;\">");
        Html.DevExpress().Button(s => {
            s.Name = "prevPage";
            s.Images.Image.IconID = IconID.ArrowsPrev32x32;
            s.RenderMode = ButtonRenderMode.Link;
            s.Text = String.Empty;
            s.ClientSideEvents.Click = @"function (s, e) { GridView.PrevPage(); }";
        }).Render();
        ViewContext.Writer.Write("</div>");
        // Render custom summary
        ViewContext.Writer.Write("<div style=\" float:left; padding-top:6px; \">");
        Html.DevExpress().Label(s => {
            s.Name = "currentPage";
            s.Properties.ClientSideEvents.Init = @"function (s, e) { 
                var text = 'Page ' + (GridView.GetPageIndex() +1) + '/' + GridView.GetPageCount(); 
                s.SetText(text); 
            }";
        }).Render();
        ViewContext.Writer.Write("</div>");
        // Render Next button
        ViewContext.Writer.Write("<div style=\" float:left; padding-left:20px; \">");
        Html.DevExpress().Button(s => {
            s.Name = "nextPage";
            s.Images.Image.IconID = IconID.ArrowsNext32x32;
            s.RenderMode = ButtonRenderMode.Link;
            s.Text = String.Empty;
            s.ClientSideEvents.Click = @"function (s, e) { GridView.NextPage(); }";
        }).Render();
        ViewContext.Writer.Write("</div>");
    });
}).Bind(Model).GetHtml()

The image below illustrates the result.

MVC_Grid_FN_Paging_CustomPager

Page Navigation on the Server Side

The active page is identified by the ASPxGridBase.PageIndex (via MVCxGridView.PageIndex) property. Use this property to switch between pages in code. The total number of pages can be obtained using the ASPxGridBase.PageCount (via MVCxGridView.PageCount) property.

Example

The code sample below demonstrates how to define the initially displayed page on the first start.

Partial View code:

@Html.DevExpress().GridView(settings =>
{
    settings.Name = "GridView";
    // ...
    settings.SettingsPager.PageSize = 5;

    settings.PreRender = (s, e) =>
    {
        var sender = s as MVCxGridView;
        // Set the zero-based index of the initially displayed page
        sender.PageIndex = 1;
    };
}).Bind(Model).GetHtml()

The image below illustrates the result.

MVC_Grid_FN_PageIndexExample

Page Navigation on the Client Side

GridView provides a client-side API that enables you to navigate a user to a specific page. The table below lists the available selection-related methods.

Method Description
ASPxClientGridView.GotoPage Selects the specified page.
ASPxClientGridView.NextPage Activates the next page.
ASPxClientGridView.PrevPage Activates the previous page.

Example

The example below demonstrates how to enable an end-user to navigate to any GridView page without clicking the pager. In this example, an end-user can use the SpinEdit editor to specify (by entering the number manually or by clicking the spin buttons) the page number to which the grid should be paged.

View Code:

<script type="text/javascript">
    function OnValueChanged(s, e) {
        GridView.GotoPage(s.GetValue()-1);
    }
</script>

@Html.Action("GridViewPartial")
<br />
<div style="float:left; padding-right:5px;">Go to page:</div>
<div style="float:left">
@Html.DevExpress().SpinEdit(settings => {
    settings.Name = "SpinEdit";
    settings.Properties.ClientSideEvents.ValueChanged = "OnValueChanged";
}).GetHtml()
</div>

Partial View code:

@Html.DevExpress().GridView(settings =>
{
    settings.Name = "GridView";
    settings.CallbackRouteValues = new { Controller = "Home", Action = "GridViewPartial" };

    settings.KeyFieldName = "CustomerID";
    settings.Columns.Add("ContactName");
    settings.Columns.Add("CompanyName");
    settings.Columns.Add("City");
    settings.Columns.Add("Region");
    settings.Columns.Add("Country");
    // ...
    settings.SettingsPager.PageSize = 5;
}).Bind(Model).GetHtml()

The image below illustrates the result.

MVC_Grid_FN_PageIndexExampleClient