Web Paging Navigation Control

Introduction


this web paging control for navigation in data list .

how to use this control


1-Set Control setting in page load


2-to get page index from this control use PagingControl1_PageIndexClick(object sender, EventArgs e) event


Sample for how to use this control



 

#region Events

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) { //
set control settings
                PagingControl1.NoRecordsPerPage = 20; PagingControl1.CurrentPageIndex = 1;
                PagingControl1.NavigationLinkesCount = 12;

                //
Get Items data
                ViewState["_Items"] = GetItems();
                ViewPage(PagingControl1.CurrentPageIndex);
            }
        }

        protected void PagingControl1_PageIndexClick(object sender, EventArgs e)
        {
            ViewPage(PagingControl1.CurrentPageIndex);
        }




 private void ViewPage(int PageNo)
        {
            if (ViewState["_Items"] != null)
            {
                PagedDataSource objPds = new PagedDataSource();
                DataTable dt = (DataTable)ViewState["_Items"];
                objPds.DataSource = new DataView(dt);
                objPds.AllowPaging = true;
                objPds.PageSize = PagingControl1.NoRecordsPerPage;
                objPds.CurrentPageIndex = PageNo-1;

                dlstItems.DataSource = objPds;
                dlstItems.DataBind();

                double d = Math.Ceiling(Convert.ToDouble(dt.Rows.Count) / PagingControl1.NoRecordsPerPage);
                PagingControl1.PagesCount = Convert.ToInt32(d);


                dlstItems.Visible = true;
                PagingControl1.Visible = true;
                lblResultMessage.Visible = false;

            }
            else
            {
                dlstItems.Visible = false;
                lblResultMessage.Visible = true;
                PagingControl1.Visible = false;
                lblResultMessage.Text = "
No Result";

            }

        }

        private DataTable GetItems()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ItemId");
            dt.Columns.Add("ItemName");

            for (int i = 1; i <= 400; i++)
            {
                DataRow dr = dt.NewRow();
                dr["ItemId"] = i.ToString();
                dr["ItemName"] = "Item" + i;
                dt.Rows.Add(dr);

            }
            return dt;
        }

        #endregion

The Control Properties and events (Source Code):



 [DefaultProperty("Text")]
    [ToolboxData("<{0}:PagingControl  runat="server">")]
    public class PagingControl : WebControl
    {
        #region Variables
        Label lblCount = new Label();
        #endregion

        #region Properties
        #region Appearance

        public enum Alignment
        {
            Center,
            Right,
            Left,
        }

        public enum Position
        {
            Top,
            Bottom,
            Right,
            Left,
        }

        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = Convert.ToString(ViewState["Text"]);
                if (s == null || s.Length==0)
                {
                    return String.Empty;
                }
                else
                {
                    return s;
                }
            }

            set
            {
                ViewState["Text"] = value;
            }
        }

        [Bindable(true), Category("Appearance"), DefaultValue("||"), Localizable(true)]
        public string LinkSeparatorText
        {
            get
            {
                string s = Convert.ToString(ViewState["_LinkSeparatorText"]);
                if (s == null || s.Length==0)
                {
                    return "||";
                }
                else
                {
                    return s;
                }
            }
            set
            {
                ViewState["_LinkSeparatorText"] = value;
            }
        }
        [Bindable(true), Category("Appearance"), DefaultValue("Prev"), Localizable(true)]
        public String PreviousButtonText
        {
            get
            {
                String s = Convert.ToString(ViewState["_PreviousButtonText"]);
                if (s == null || s.Length==0)
                {
                    return "Prev";
                }
                else
                {
                    return s;
                }
            }

            set
            {
                ViewState["_PreviousButtonText"] = value;
            }
        }

        [Bindable(true), Category("Appearance"), DefaultValue("Next"), Localizable(true)]
        public String NextButtonText
        {
            get
            {
                String s = Convert.ToString(ViewState["_NextButtonText"]);
                if (s == null || s.Length==0)
                {
                    return "Next";
                }
                else
                {
                    return s;
                }
            }

            set
            {
                ViewState["_NextButtonText"] = value;
            }
        }

        [Bindable(true), Category("Appearance"), DefaultValue("First"), Localizable(true)]
        public String FirstButtonText
        {
            get
            {
                String s = Convert.ToString(ViewState["_FirstButtonText"]);
                if (s == null || s.Length==0)
                {
                    return "First";
                }
                else
                {
                    return s;
                }
            }

            set
            {
                ViewState["_FirstButtonText"] = value;
            }
        }

        [Bindable(true), Category("Appearance"), DefaultValue("Last"), Localizable(true)]
        public String LastButtonText
        {
            get
            {
                String s = Convert.ToString(ViewState["_LastButtonText"]);
                if (s == null || s.Length==0)
                {
                    return "Last";
                }
                else
                {
                    return s;
                }
            }

            set
            {
                ViewState["_LastButtonText"] = value;
            }
        }

        [Bindable(true), Category("Appearance"), DefaultValue(" Of "), Localizable(true)]
        public String SeparatedCountText
        {
            get
            {
                String s = Convert.ToString(ViewState["_SeparatedCountText"]);
                if (s == null || s.Length==0)
                {
                    return " Of ";
                }
                else
                {
                    return s;
                }
            }


            set
            {
                ViewState["_SeparatedCountText"] = value;
            }
        }

        [Bindable(true), Category("Appearance"), DefaultValue("("), Localizable(true)]
        public String BeforeCountText
        {
            get
            {
                String s = Convert.ToString(ViewState["_BeforeCountText"]);
                if (s == null || s.Length==0)
                {
                    return "(";
                }
                else
                {
                    return s;
                }
            }

            set
            {
                ViewState["_BeforeCountText"] = value;
            }
        }

        [Bindable(true), Category("Appearance"), DefaultValue(")"), Localizable(true)]
        public String AfterCountText
        {
            get
            {
                String s = Convert.ToString(ViewState["_AfterCountText"]);
                if (s == null || s.Length==0)
                {
                    return ")";
                }
                else
                {
                    return s;
                }
            }

            set
            {
                ViewState["_AfterCountText"] = value;
            }
        }

        [Bindable(true), Category("Appearance"), DefaultValue("Alignment.Center"), Localizable(true)]
        public Alignment CountAlignment
        {
            get
            {
                Alignment s = Alignment.Center;
                if(ViewState["_CountAlignment"]!=null)
                 s = (Alignment)ViewState["_CountAlignment"];
                return s;
            }

            set
            {
                ViewState["_CountAlignment"] = value;
            }
        }

        [Bindable(true), Category("Appearance"), DefaultValue("Position.Bottom"), Localizable(true)]
        public Position CountPosition
        {
            get
            {
                Position s = Position.Bottom;
                if (ViewState["_CountPosition"] != null)
                 s = (Position)ViewState["_CountPosition"];
                return s;
            }

            set
            {
                ViewState["_CountPosition"] = value;
            }
        }

        #endregion

        #region Visibility
        [Bindable(true), Category("Visibility"), DefaultValue("true"), Localizable(true)]
        public Boolean ShowCount
        {
            get
            {
                Boolean s = false;
                if (ViewState["_ShowCount"] == null)
                {
                    s = true;

                }
                return s;

            }

            set
            {
                ViewState["_ShowCount"] = value;
            }
        }
        [Bindable(true), Category("Visibility"), DefaultValue("true"), Localizable(true)]
        public Boolean ShowFirst
        {
            get
            {
                Boolean s = false;
                if (ViewState["_ShowFirst"] == null)
                {
                    s = true;

                }
                return s;
            }
            set
            {
                ViewState["_ShowFirst"] = value;
            }
        }
        [Bindable(true), Category("Visibility"), DefaultValue("true"), Localizable(true)]
        public Boolean ShowLast
        {
            get
            {
                Boolean s = false;
                if (ViewState["_ShowLast"] == null)
                {
                    s = true;

                }
                return s;
            }

            set
            {
                ViewState["_ShowLast"] = value;
            }
        }
        [Bindable(true), Category("Visibility"), DefaultValue("true"), Localizable(true)]
        public Boolean ShowPrevious
        {
            get
            {
                Boolean s = false;
                if (ViewState["_ShowPrevious"] == null)
                {
                    s = true;

                }
                return s;
            }

            set
            {
                ViewState["_ShowPrevious"] = value;
            }
        }
        [Bindable(true), Category("Visibility"), DefaultValue("true"), Localizable(true)]
        public Boolean ShowNext
        {
            get
            {
                Boolean s = false;
                if (ViewState["_ShowNext"] == null)
                {
                    s = true;

                }
                return s;

            }

            set
            {
                ViewState["_ShowNext"] = value;
            }
        }
        #endregion

        #region Paging
        private Int32 _CurrentStartPage;
        public Int32 CurrentStartPage
        {
            get
            {
                if ((CurrentPageIndex % NavigationLinkesCount == 0))
                {

                    _CurrentStartPage = (CurrentPageIndex - NavigationLinkesCount) + 1;
                }

                else
                {

                    _CurrentStartPage = (CurrentPageIndex - (CurrentPageIndex % NavigationLinkesCount)) + 1;

                }
                return _CurrentStartPage;
            }

        }


        private Int32 _CurrentPageIndex;
        public Int32 CurrentPageIndex
        {
            get
            {
                if ((ViewState["_CurrentPageIndex"] == null))
                {
                    _CurrentPageIndex = 1;
                }
                else
                {
                    _CurrentPageIndex = Convert.ToInt32(ViewState["_CurrentPageIndex"]);
                }
                return _CurrentPageIndex;

            }
            set
            {
                _CurrentPageIndex = value;
                ViewState["_CurrentPageIndex"] = _CurrentPageIndex;
            }
        }

        ///
        /// number of pages
        ///

        private Int32 _PagesCount;
        public Int32 PagesCount
        {
            get
            {
                if (ViewState["_PagesCount"] == null)
                {
                    _PagesCount = 1;
                }
                else
                {
                    _PagesCount = Convert.ToInt32(ViewState["_PagesCount"]);
                }
                return _PagesCount;
            }
            set
            {
                _PagesCount = value;
                ViewState["_PagesCount"] = _PagesCount;
            }
        }

        ///
        /// count of navigation linkes that will appears
        ///

        private Int32 _NavigationLinkesCount;
        public Int32 NavigationLinkesCount
        {
            get
            {
                if (ViewState["_NavigationLinkesCount"] == null)
                {
                    _NavigationLinkesCount = 1;
                }
                else
                {
                    _NavigationLinkesCount = Convert.ToInt32(ViewState["_NavigationLinkesCount"]);
                }
                return _NavigationLinkesCount;
            }
            set
            {
                _NavigationLinkesCount = value;
                ViewState["_NavigationLinkesCount"] = _NavigationLinkesCount;
            }
        }

        ///
        /// Number of records that will appears per page
        ///

        private Int32 _NoRecordsPerPage;
        public Int32 NoRecordsPerPage
        {
            get
            {
                if (ViewState["_NoRecordsPerPage"] == null)
                {
                    _NoRecordsPerPage = 1;
                }
                else
                {
                    _NoRecordsPerPage = Convert.ToInt32(ViewState["_NoRecordsPerPage"]);
                }
                return _NoRecordsPerPage;
            }
            set
            {
                _NoRecordsPerPage = value;
                ViewState["_NoRecordsPerPage"] = _NoRecordsPerPage;
            }
        }

        #endregion

        #endregion

        #region Methods
     
        private void SelectPage()
        {
            Int32 PageIndex = CurrentPageIndex;
            Control ctl = FindControl(this.ClientID + "_" + "btn" + PageIndex);
            if (ctl != null)
            {
                LinkButton btnToBeClicked = (LinkButton)ctl;
                if (btnToBeClicked != null)
                {
                    btnToBeClicked.Enabled = false;
                    lblCount.Text = BeforeCountText + PageIndex + SeparatedCountText + PagesCount + AfterCountText;
                }
            }
        }

        public void PaintWithoutClickSelected()
        {
            GeneratePaging();
            SelectPage();
        }

        public void PaintWithClickSelected()
        {
            PaintWithoutClickSelected();
            FirePageClickEvent();
        }

        #endregion

        #region Event
        ///
        /// page index click event fire when click on navegations buttons
        ///

        public event EventHandler PageIndexClick;

        protected override void OnLoad(System.EventArgs e)
        {
            //Generate Linked Buttons
            PaintWithoutClickSelected();
            base.OnLoad(e);
        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();
        }

        protected override void OnPreRender(EventArgs e)
        {
            //Generate Linked Buttons
            PaintWithoutClickSelected();
            base.OnPreRender(e);
        }

        protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
            foreach (Control ctl in this.Controls)
            {
                if (ctl != null)
                {
                    ctl.RenderControl(writer);
                }
            }
            base.Render(writer);
        }

        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);
        }

        protected void LinkedButtonClick(Object sender, EventArgs e)
        {

            LinkButton lbtn = (LinkButton)sender;

            if ((lbtn.ID.IndexOf(this.ClientID + "_" + "btnFirst") > -1))
            {
                CurrentPageIndex = 1;
            }
            else if ((lbtn.ID.IndexOf(this.ClientID + "_" + "btnPrevPage") > -1))
            {
                if ((CurrentPageIndex > 1))
                {
                    CurrentPageIndex = CurrentPageIndex - 1;
                }
            }
            else if ((lbtn.ID.IndexOf(this.ClientID + "_" + "btnNextPage") > -1))
            {
                if ((CurrentPageIndex < PagesCount))
                {
                    CurrentPageIndex = CurrentPageIndex + 1;
                }
            }
            else if ((lbtn.ID.IndexOf(this.ClientID + "_" + "btnLast") > -1))
            {
                CurrentPageIndex = PagesCount;
            }
            else
            {
                CurrentPageIndex = Convert.ToInt32(lbtn.Text);
            }

            PaintWithClickSelected();
        }

        private void FirePageClickEvent()
        {
            if (PageIndexClick != null)
            {
                PageIndexClick(null, null);
            }
        }


        #endregion
  private void GeneratePaging()
        {
            this.Controls.Clear();

            #region Count Label Top Left
            // add count label according to it's position
            lblCount = new Label();
            lblCount.ID = this.ClientID + "_" + "lblCount";
            lblCount.Visible = ShowCount;

            if (CountPosition == Position.Top)
            {
                //  Controls.Add(new LiteralControl("
")) Controls.Add(new LiteralControl("
")); this.Controls.Add(lblCount); //Controls.Add(new LiteralControl("
"))

                Controls.Add(new LiteralControl("")); // Controls.Add(new LiteralControl("
"))
} else if (CountPosition == Position.Left) { this.Controls.Add(lblCount); } #endregion ////Start Links //// Int32 EndPage = CurrentStartPage + NavigationLinkesCount - 1; if ((EndPage > PagesCount)) { EndPage = PagesCount; } LinkButton lbtn; for (int i = CurrentStartPage; i <= EndPage; i++) { #region First Button And Prev //First Button And Prev if (CurrentPageIndex > 1 && (i == CurrentStartPage)) { // added once in start //First lbtn = new LinkButton(); lbtn.Text = FirstButtonText; lbtn.ID = this.ClientID + "_" + "btnFirst"; lbtn.CausesValidation = false; lbtn.Visible = ShowFirst; lbtn.Click += LinkedButtonClick; Controls.Add(lbtn); if (ShowFirst) { Controls.Add(new LiteralControl(LinkSeparatorText)); //Previous lbtn = new LinkButton(); lbtn.Text = PreviousButtonText; lbtn.ID = this.ClientID + "_" + "btnPrevPage" + (CurrentPageIndex - 1); lbtn.CausesValidation = false; lbtn.Visible = ShowPrevious; lbtn.Click += LinkedButtonClick; Controls.Add(lbtn); Controls.Add(new LiteralControl(LinkSeparatorText)); // if( ShowPrevious ){ Controls.Add(new LiteralControl(LinkSeparatorText)) } } #endregion #region Pages No //Page Index lbtn = new LinkButton(); lbtn.Text = i.ToString(); lbtn.ID = this.ClientID + "_" + "btn" + i.ToString(); lbtn.CausesValidation = false; lbtn.Click += LinkedButtonClick; Controls.Add(lbtn); if (PagesCount > 1) { Controls.Add(new LiteralControl(LinkSeparatorText)); } lbtn.Enabled = true; #endregion #region Next Button And Last //Next Button And Last //added once if( CurrentPageIndex less than if (CurrentPageIndex < PagesCount && (i == EndPage)) { //add once in End //Next lbtn = new LinkButton(); lbtn.Text = NextButtonText; lbtn.ID = this.ClientID + "_" + "btnNextPage" + (CurrentPageIndex + 1); lbtn.CausesValidation = false; lbtn.Visible = ShowNext; lbtn.Click += LinkedButtonClick; Controls.Add(lbtn); if (ShowNext) { Controls.Add(new LiteralControl(LinkSeparatorText)); //Last lbtn = new LinkButton(); lbtn.Text = LastButtonText; lbtn.ID = this.ClientID + "_" + "btnLast" + (i + 1); lbtn.CausesValidation = false; lbtn.Visible = ShowLast; lbtn.Click += LinkedButtonClick; Controls.Add(lbtn); //if( ShowLast ){ Controls.Add(new LiteralControl(LinkSeparatorText)) } } #endregion } //End Links #region Count Label Bottom Right //add count label according to it's position if (CountPosition == Position.Bottom) { Controls.Add(new LiteralControl("
"
)); //Controls.Add(new LiteralControl("
")) Controls.Add(new LiteralControl("
")); this.Controls.Add(lblCount); Controls.Add(new LiteralControl("
"
)); //Controls.Add(new LiteralControl("
"))
} else if (CountPosition == Position.Right) { this.Controls.Add(lblCount); } #endregion } }



Similar Articles