Thursday, January 17, 2013

Custom paging for Gridview, Datalist, Datagrid and Repeater


Hi Friends,

Today i am going to demonstrate custom paging for Gridview, Datalist, Datagrid and Repeater.

Step 1: Create stored procedure named GetLog
Create Procedure GetLog
@Index INT=0,
@Size INT=0
AS
    BEGIN

            SELECT  * FROM (SELECT  ROW_NUMBER() OVER (ORDER BY Id ASC) as row,* FROM Log) tblTemp
                                    WHERE row between (@Index - 1) * @Size + 1 and @Index*@Size;
            SELECT COUNT(*) FROM Log;
    END


Step 2: Create class named Log.cs

public class Log
{
    public int Id { getset; }
    public DateTime Date { getset; }
    public string Logger { getset; }
    public string Message { getset; }
}

Step 3: Create Private Properties

#region Private Properties
        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; }
        }
        private int firstIndex
        {
            get
            {
                int _FirstIndex = 0;
                if (ViewState["_FirstIndex"] == null)
                    _FirstIndex = 0;
                else
                    _FirstIndex = Convert.ToInt32(ViewState["_FirstIndex"]);
                return _FirstIndex;
            }
            set { ViewState["_FirstIndex"] = value; }
        }
        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; }
        }
        #endregion
 
Step 4:  Create Methods

#region Method
 
        protected List<Log> GetList(int index)
        {
            var oManager = new IssueManager();
            DataSet dataSet = oManager.GetLog(index);
            ViewState["TotalPages"] = dataSet.Tables[1].Rows[0][0].ToStringSafe();
            return dataSet.Tables[0].ConvertToList<Log>();
        }
 
        /// <summary>
        /// Binding Main Items List
        /// </summary>
        private void BindItemsList(int index)
        {
            _PageDataSource.DataSource = GetList(index); ;
            _PageDataSource.AllowPaging = true;
            int pageSize = 15;
            _PageDataSource.PageSize = pageSize;
            _PageDataSource.CurrentPageIndex = 0;
 
            //this.lblPageInfo.Text = "Page " + (CurrentPage) + " of " + _PageDataSource.PageCount;
            hdnPageCount.Value = (CurrentPage + 1).ToStringSafe();
            int totalRecord = ViewState["TotalPages"].ToIntSafe();
            int lastPage = totalRecord / pageSize;
            int currentPageIndex = CurrentPage + 1;
            if (CurrentPage == 0)
            {
                this.lbtnFirst.Enabled = false;
                this.lbtnPrevious.Enabled = false;
                this.lbtnLast.Enabled = true;
                this.lbtnNext.Enabled = true;
            }
            else if (lastPage == currentPageIndex)
            {
                this.lbtnFirst.Enabled = true;
                this.lbtnPrevious.Enabled = true;
                this.lbtnLast.Enabled = false;
                this.lbtnNext.Enabled = false;
            }
            else
            {
                this.lbtnFirst.Enabled = true;
                this.lbtnPrevious.Enabled = true;
                this.lbtnLast.Enabled = true;
                this.lbtnNext.Enabled = true;
            }
            grvLog.DataSource = _PageDataSource;
            grvLog.DataBind();
            this.doPaging();
            if (_PageDataSource.DataSourceCount < 1)
            {
                tb_Pagging.Visible = false;
            }
        }
 
        /// <summary>
        /// Binding Paging List
        /// </summary>
        private void doPaging()
        {
            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add("PageIndex");
            dt.Columns.Add("PageText");
            firstIndex = CurrentPage - 5;
            int pageSize = 15;
            if (firstIndex < 0)
            {
                firstIndex = 0;
            }
            lastIndex = firstIndex + 15;
           
            int totalRecord = ViewState["TotalPages"].ToIntSafe();
            int remainder = totalRecord % pageSize;
            int lastPage;
            if (remainder == 0)
            {
                lastPage = totalRecord / pageSize;
            }
            else
            {
                lastPage = (totalRecord / pageSize) + 1;
            }
            if (lastIndex >= lastPage)
            {
                lastIndex = lastPage;
                if (CurrentPage+1 >= lastIndex)
                {
                    lbtnNext.Enabled = false;
                    lbtnLast.Enabled = false;
                }
                else
                {
                    lbtnNext.Enabled = true;
                    lbtnLast.Enabled = true;
                }
            }
            for (int i = firstIndex; i < lastIndex; i++)
            {
                System.Data.DataRow dr = dt.NewRow();
                dr[0] = i;
                dr[1] = i + 1;
                dt.Rows.Add(dr);
            }
            this.dlPaging.DataSource = dt;
            this.dlPaging.DataBind();
 
            if (dt.Rows.Count > 0)
            {
                if (dt.Rows.Count == 1)
                {
                    tb_Pagging.Visible = false;
                }
                else
                {
                    tb_Pagging.Visible = true;
                }
            }
        }
 
        #endregion
 
Step 5: Create Paged Datasource

#region PagedDataSource
 
        PagedDataSource _PageDataSource = new PagedDataSource();
 
        #endregion
 
Step 6: Create Pagging Events

#region PaggingEvents
 
        protected void lbtnFirst_Click(object sender, EventArgs e)
        {
            CurrentPage = 0;
            this.BindItemsList(CurrentPage + 1);
        }
        protected void lbtnPrevious_Click(object sender, EventArgs e)
        {
            CurrentPage -= 1;
            this.BindItemsList(CurrentPage + 1);
        }
        protected void lbtnNext_Click(object sender, EventArgs e)
        {
            CurrentPage += 1;
            this.BindItemsList(CurrentPage + 1);
        }
        protected void lbtnLast_Click(object sender, EventArgs e)
        {
            int pageSize = 15;
            int index;
            int count = ViewState["TotalPages"].ToIntSafe() % pageSize;
            if (count == 0)
            {
                CurrentPage = ViewState["TotalPages"].ToIntSafe() / pageSize;
            }
            else
            {
                CurrentPage = (ViewState["TotalPages"].ToIntSafe() / pageSize) + 1;
            }
            this.BindItemsList(CurrentPage);
            CurrentPage--;
        }
        protected void dlPaging_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName.Equals("Paging"))
            {
                CurrentPage = Convert.ToInt16(e.CommandArgument.ToString());
                this.BindItemsList(CurrentPage + 1);
            }
        }
        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;
            }
        }
        #endregion

Step 7: Create Page load event

 #region Event
 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindItemsList(1);
            }
        }

Step 8: Now copy the html on aspx page

<div>
        <asp:GridView ID="grvLog" runat="server" AllowPaging="False" AutoGenerateColumns="False">
            <Columns>
                <asp:TemplateField HeaderText="ID">
                    <ItemTemplate>
                        <asp:Literal runat="server" ID="litID" Text='<%# Eval("Id") %>'></asp:Literal>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Date">
                    <ItemTemplate>
                        <asp:Literal runat="server" ID="litDate" Text='<%# Eval("Date") %>'></asp:Literal>
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Logger">
                    <ItemTemplate>
                        <asp:Literal runat="server" ID="litLogger" Text='<%# Eval("Logger") %>'></asp:Literal>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
        <asp:HiddenField ID="hdnPage" runat="server" Value="" />
        <asp:HiddenField ID="hdnPageCount" runat="server" Value="" />
        <table width="100%" id="tb_Pagging" runat="server">
            <tr>
                <td width="100%">
                    <table cellpadding="0" border="0">
                        <tr>
                            <td align="right">
                                <asp:LinkButton ID="lbtnFirst" Style="color: #1A75AC;" runat="server" ClientIDMode="Static"
                                    CausesValidation="false" OnClick="lbtnFirst_Click">First</asp:LinkButton>
                                &nbsp;
                            </td>
                            <td align="right">
                                <asp:LinkButton ID="lbtnPrevious" Style="color: #1A75AC;" runat="server" ClientIDMode="Static"
                                    CausesValidation="false" OnClick="lbtnPrevious_Click">Previous</asp:LinkButton>&nbsp;&nbsp;
                            </td>
                            <td align="center" valign="middle">
                                <asp:DataList ID="dlPaging" runat="server" RepeatDirection="Horizontal" OnItemCommand="dlPaging_ItemCommand"
                                    OnItemDataBound="dlPaging_ItemDataBound">
                                    <ItemTemplate>
                                        <asp:LinkButton ID="lnkbtnPaging" Style="color: #63182E; font-family: Arial; font-size: 14px;"
                                            runat="server" CommandArgument='<%# Eval("PageIndex") %>' CommandName="Paging"
                                            Text='<%# Eval("PageText") %>'></asp:LinkButton>&nbsp;
                                    </ItemTemplate>
                                </asp:DataList>
                            </td>
                            <td align="left">
                                &nbsp;&nbsp;<asp:LinkButton ID="lbtnNext" Style="color: #1A75AC;" runat="server"
                                    ClientIDMode="Static" CausesValidation="false" OnClick="lbtnNext_Click">Next</asp:LinkButton>
                            </td>
                            <td align="left">
                                &nbsp;
                                <asp:LinkButton ID="lbtnLast" runat="server" Style="color: #1A75AC;" CausesValidation="false"
                                    ClientIDMode="Static" OnClick="lbtnLast_Click">Last</asp:LinkButton>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </div>
Blogarama - The Blog Directory

No comments:

Post a Comment