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



Bash
 

#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):



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 } }