ManuelAbadia.com
PagerDataSource samples
Samples



Product Information

Custom Page Items

In some scenarios we need to page the data source but not using a standard partition. For example, in a page with a list of customers, we may be interested to have a pager that contains all the letters, and when a letter is clicked, the customers whose name starts with that letter are shown.

The PagerDataSource has support for that scenario. In order to provide custom page items instead of the usual numbers, we have to set the UseCustomPageItems property to true and we also have to supply the custom page items using the CustomPageItems collection.

One implication of this mode is that each page of data can have any number of items and it is not limited by the PageSize. If we are using a DataSourceControl to supply the data to the PagerDataSource, it has to support paging and the startRowIndexParameter will contain the page item clicked (the maximumRowsParameter is not used in this case). If we are not using a DataSourceControl to supply the data to the PagerDataSource we can supply the data in the PageChanged event as the example Paging a DataSource (2) shows.

In this sample what we are going to use ficticious data showing IP addresses, access time and data downloaded. What we want is to populate the GridView with that data ( obtained from an ObjectDataSource) and let the user to see the data grouped by country. The PagerDataSource is used for this. In this sample, the custom page items are created in code, but they can be created also using the design-time editor.

The source code for this page is shown after the live sample.


IP addresses list

<<<|||||>>>
IdIPAddressConnectionTimeKB downloadedCountry
4240.98.27.819/6/2010 8:48:47 PM953US
675.33.235.1409/6/2010 8:13:47 AM325US
9238.252.253.2099/6/2010 4:21:47 AM397US
1323.146.184.1569/7/2010 12:02:47 AM130US
14136.157.253.1829/7/2010 5:40:47 AM536US
19246.217.22.1229/6/2010 4:17:47 AM637US
26214.66.175.1539/5/2010 9:51:47 PM333US
36140.208.88.1099/6/2010 10:16:47 AM508US
39251.140.96.1509/6/2010 1:52:47 AM348US
44169.143.34.1069/6/2010 12:29:47 PM224US
5635.152.240.2039/5/2010 3:32:47 AM471US
65144.132.59.2249/5/2010 10:50:47 PM530US
8168.163.81.859/5/2010 12:37:47 AM665US
8924.129.53.2319/6/2010 4:18:47 PM397US
95247.111.170.2259/5/2010 6:36:47 PM744US
97222.39.163.2419/5/2010 1:23:47 PM739US
100209.67.224.679/5/2010 7:24:47 PM67US
<<<|||||>>>

Sample source code

The ASPX file for this sample is:.

<%@ Page Language="C#" MasterPageFile="~/DefaultMaster.master" AutoEventWireup="true" CodeFile="CustomPageItems.aspx.cs" Inherits="CustomPageItems" Title="Custom Page Items" %>

 

<%@ Register Assembly="PagerDataSource" Namespace="Manu.Web.UI.WebControls" TagPrefix="manu" %>

 

<asp:Content ID="Content1" ContentPlaceHolderID="Content" Runat="Server">

    <h2>IP addresses list</h2>

 

    <manu:PagerDataSource ID="PagerDataSource1" runat="server"

        DataSourceID="ObjectDataSource1" UseCustomPageItems="True">

    </manu:PagerDataSource>

 

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
        BackColor
="#335789"

        BorderColor="#133769" BorderStyle="Solid" BorderWidth="1px" DataKeyNames="Id"

        DataSourceID="PagerDataSource1" CssClass="gridview" AllowSorting="True">

        <Columns>

            <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True"
            SortExpression
="Id" />

            <asp:BoundField DataField="IPAddress" HeaderText="IPAddress" 
            SortExpression
="IPAddress" />

            <asp:BoundField DataField="ConnectionTime" HeaderText="ConnectionTime"
            SortExpression
="ConnectionTime" />

            <asp:BoundField DataField="KB downloaded" HeaderText="KB downloaded"
            SortExpression
="KB downloaded" />

            <asp:BoundField DataField="Country" HeaderText="Country" 
            SortExpression
="Country" />

        </Columns>

        <RowStyle BackColor="White"

            ForeColor="#436799" />

        <HeaderStyle ForeColor="White" />

    </asp:GridView>

    <manu:PagerDataSource ID="PagerDataSource2" runat="server"

        DataSourceID="PagerDataSource1" UseCustomPageItems="True">

    </manu:PagerDataSource>

 

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="IPDataDAL"

        SortParameterName="sortedBy"  SelectMethod="GetDataByCountry" 
        SelectCountMethod
="CountAll" EnablePaging="True"

        MaximumRowsParameterName="maxRows" StartRowIndexParameterName="countryId" 
            OldValuesParameterFormatString
="original_{0}">

    </asp:ObjectDataSource>

</asp:Content>


The code-behind file (ASPX.CS) is:


using System;

using System.Collections.Specialized;

 

public partial class CustomPageItems : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

        // the first time, set the custom pages items

        if (!IsPostBack) {

            string image = "<img src='images/{0}.gif' />";

 

            StringCollection customPages = new StringCollection();

 

            // adds each image to the collection of custom page items

            foreach (string code in Countries.codes) {

                customPages.Add(String.Format(image, code));

            }

 

            // set the custom page items for each PagerDataSource

            PagerDataSource1.CustomPageItems.AddRange(customPages);

            PagerDataSource2.CustomPageItems.AddRange(customPages);

        }

    }

}

sdafsdf