Monday 11 March 2013

How to implement pagging in Repeater OR Datalist



Repeater and DataList control does not provide default pagging so we need to implement it explicitly. this is very easy to implement our own pagging in Repeater or Datalist.
   Just follow the step and your pagging will implement very easily :

Step 1.  
           Follow these step for .aspx page:
         i. Copy and paste in .aspx page where you want to display Repeater Or DataList data
======================================================================

 <table>
                        <tr>
                            <td>
                                <asp:Repeater ID="dListItems" runat="server">
                                    <ItemTemplate>
                                        <asp:Label ID="Label1" runat="server" Text='<%#Eval("title") %>'></asp:Label>
                                        <br />
                                    </ItemTemplate>
                                </asp:Repeater>
                            </td>
                        </tr>
                    </table>
======================================================================
ii. Copy and paste this where you want display pagging in your page 
======================================================================

    <table>
                            <tr>
                                <td>
                                    <asp:LinkButton ID="lbtnFirst" OnClick="lbtnFirst_Click" runat="server">First</asp:LinkButton>&nbsp;<asp:LinkButton
                                        ID="lbtnPrevious" OnClick="lbtnPrevious_Click" runat="server"><<</asp:LinkButton>&nbsp;
                                </td>
                                <td>
                                    <asp:DataList ID="dlPaging" RepeatDirection="Vertical" RepeatColumns="10" runat="server"
                                        OnItemDataBound="dlPaging_ItemDataBound" OnItemCommand="dlPaging_ItemCommand">
                                        <ItemTemplate>
                                            <asp:LinkButton ID="lnkbtnPaging" Text='<%#Eval("PageText") %>' CommandArgument='<%#Eval("PageIndex") %>'
                                                CommandName="Paging" runat="server">LinkButton</asp:LinkButton>
                                        </ItemTemplate>
                                    </asp:DataList>
                                </td>
                                <td>
                                    &nbsp;<asp:LinkButton ID="lbtnNext" OnClick="lbtnNext_Click" runat="server">>></asp:LinkButton>&nbsp;<asp:LinkButton
                                        ID="lbtnLast" OnClick="lbtnLast_Click" runat="server">Last</asp:LinkButton>
                                </td>
                            </tr>
                        </table>
======================================================================
iii. Copy and paste this where you want to display pagging info (i.e.currently displaying which number of page, total pages etc...)
======================================================================
 <asp:Label ID="lblPageInfo" runat="server" Text="Label"></asp:Label> ======================================================================
Above provided steps are for .aspx page .
now next step is for .aspx.cs page means for code behind.
Step 2:
          just and paste these function in code behind and run your page.
i. copy these all functions and paste in code behind : 
=======================================================================

 /// <summary>
    /// This will bind data into datalist
    /// </summary>
    private void BindItemsList()
    {
        PagedDataSource _PageDataSource = new PagedDataSource();

        DataTable dataTable = this.GetDataTable();
        _PageDataSource.DataSource = dataTable.DefaultView;
        _PageDataSource.AllowPaging = true;
        _PageDataSource.PageSize = 10;
        _PageDataSource.CurrentPageIndex = CurrentPage;
        ViewState["TotalPages"] = _PageDataSource.PageCount;

        this.lblPageInfo.Text = "Page " + (CurrentPage + 1) + " of " + _PageDataSource.PageCount;
        this.lbtnPrevious.Enabled = !_PageDataSource.IsFirstPage;
        this.lbtnNext.Enabled = !_PageDataSource.IsLastPage;
        this.lbtnFirst.Enabled = !_PageDataSource.IsFirstPage;
        this.lbtnLast.Enabled = !_PageDataSource.IsLastPage;

        this.dListItems.DataSource = _PageDataSource;
        this.dListItems.DataBind();
        this.doPaging();
    }
    /// <summary>
    /// Praparing table for filling into datalist
    /// </summary>
    /// <returns>Datatable</returns>
    private DataTable GetDataTable()
    {
        DataTable dtItems = new DataTable();

        DataColumn dcName = new DataColumn();
        dcName.ColumnName = "title";
        dcName.DataType = System.Type.GetType("System.String");
        dtItems.Columns.Add(dcName);

        DataRow row;
        for (int i = 1; i <= 100; i++)
        {
            row = dtItems.NewRow();
            row["title"] = "Sample Text: this is sample text " + i;
            dtItems.Rows.Add(row);

        }
        return dtItems;

    }
    /// <summary>
    /// Property
    /// </summary>
    private int CurrentPage
    {
        get
        {
            object objPage = ViewState["_CurrentPage"];
            int _CurrentPage = 0;
            if (objPage == null)
            {
                _CurrentPage = 0;
            }
            else
            {
                _CurrentPage = (int)objPage;
            }
            return _CurrentPage;
        }
        set { ViewState["_CurrentPage"] = value; }
    }
    /// <summary>
    /// Property
    /// </summary>
    private int fistIndex
    {
        get
        {

            int _FirstIndex = 0;
            if (ViewState["_FirstIndex"] == null)
            {
                _FirstIndex = 0;
            }
            else
            {
                _FirstIndex = Convert.ToInt32(ViewState["_FirstIndex"]);
            }
            return _FirstIndex;
        }
        set { ViewState["_FirstIndex"] = value; }
    }
    /// <summary>
    /// Property
    /// </summary>
    private int lastIndex
    {
        get
        {

            int _LastIndex = 0;
            if (ViewState["_LastIndex"] == null)
            {
                _LastIndex = 0;
            }
            else
            {
                _LastIndex = Convert.ToInt32(ViewState["_LastIndex"]);
            }
            return _LastIndex;
        }
        set { ViewState["_LastIndex"] = value; }
    }
    /// <summary>
    /// Fill pages with link in paggingdatalist
    /// </summary>
    private void doPaging()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("PageIndex");
        dt.Columns.Add("PageText");

        fistIndex = CurrentPage - 5;

        if (CurrentPage > 5)
        {
            lastIndex = CurrentPage + 5;
        }
        else
        {
            lastIndex = 10;
        }
        if (lastIndex > Convert.ToInt32(ViewState["TotalPages"]))
        {
            lastIndex = Convert.ToInt32(ViewState["TotalPages"]);
            fistIndex = lastIndex - 10;
        }

        if (fistIndex < 0)
        {
            fistIndex = 0;
        }

        for (int i = fistIndex; i < lastIndex; i++)
        {
            DataRow dr = dt.NewRow();
            dr[0] = i;
            dr[1] = i + 1;
            dt.Rows.Add(dr);
        }

        this.dlPaging.DataSource = dt;
        this.dlPaging.DataBind();
    }
    protected void dlPaging_ItemCommand(object source, DataListCommandEventArgs e)
    {
        if (e.CommandName.Equals("Paging"))
        {
            CurrentPage = Convert.ToInt16(e.CommandArgument.ToString());
            this.BindItemsList();
        }
    }

    protected void dlPaging_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        LinkButton lnkbtnPage = (LinkButton)e.Item.FindControl("lnkbtnPaging");
        if (lnkbtnPage.CommandArgument.ToString() == CurrentPage.ToString())
        {
            lnkbtnPage.Enabled = false;
            lnkbtnPage.Style.Add("fone-size", "14px");
            lnkbtnPage.Font.Bold = true;

        }
    }
    protected void lbtnNext_Click(object sender, EventArgs e)
    {
        CurrentPage += 1;
        this.BindItemsList();
    }
    protected void lbtnPrevious_Click(object sender, EventArgs e)
    {
        CurrentPage -= 1;
        this.BindItemsList();
    }
    protected void lbtnLast_Click(object sender, EventArgs e)
    {

        CurrentPage = (Convert.ToInt32(ViewState["TotalPages"]) - 1);
        this.BindItemsList();

    }
    protected void lbtnFirst_Click(object sender, EventArgs e)
    {
        CurrentPage = 0;
        this.BindItemsList();
    }
====================================================================
ii. this is last step just call this function in page_load()


 if (!IsPostBack)
        {
            this.BindItemsList();
        }

Pagging preview :
your pagging will look like ....