您的位置:首页 > 编程语言 > ASP

asp.net自定义分页控件

2006-12-22 11:51 531 查看
控件代码:




using System;


using System.Data;


using System.Configuration;


using System.Web;


using System.Web.Security;


using System.Web.UI;


using System.Web.UI.WebControls;


using System.Web.UI.WebControls.WebParts;


using System.Web.UI.HtmlControls;


using System.ComponentModel;


using System.Collections;




namespace SmartPager




...{




    /**/
          /// <summary>


       ///名称:SmartPager


       ///版本:2.0


       ///作者:小青青


       ///CopyRight:2006 请勿用作商业用途


    /// </summary>


    [DefaultEvent("PageIndexChanged"), ToolboxData("<{0}:SmartPager runat=server></{0}:SmartPager>")]


    public class SmartPager : System.Web.UI.WebControls.WebControl, INamingContainer




    ...{


        TextBox txtNewPageNumber;


        LinkButton lnkPrev;


        LinkButton lnkNext;


        LinkButton lnkFirst;


        LinkButton lnkLast;


        LinkButton lnkGo;
<
4000
img alt="" align="top" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" />        Label lblCurrentPage;


        public delegate void PageChangedEventHandler(Object source, PageChangedEventArgs e);


        public event PageChangedEventHandler PageIndexChanged;


        private int _PageSize;


        private int _CurrentPageIndex;


        private int _VirtualItemCount;




        public SmartPager()


            : base(HtmlTextWriterTag.Div)




        ...{ }




        protected override void OnInit(EventArgs e)




        ...{




            txtNewPageNumber = new TextBox();


            lnkPrev = new LinkButton();


            lnkNext = new LinkButton();


            lnkFirst = new LinkButton();


            lnkLast = new LinkButton();


            lnkGo = new LinkButton();


            lblCurrentPage = new Label();


            EnsureChildControls();




        }


        protected override void CreateChildControls()




        ...{




            this.Controls.Add(lnkFirst);


            this.Controls.Add(lnkPrev);


            this.Controls.Add(lblCurrentPage);


            this.Controls.Add(txtNewPageNumber);


            this.Controls.Add(lnkGo);


            this.Controls.Add(lnkNext);


            this.Controls.Add(lnkLast);






            txtNewPageNumber.Width = 20;




            lnkFirst.Attributes.Add("title", "首页");


            lnkPrev.Attributes.Add("title", "上一页");


            lnkNext.Attributes.Add("title", "下一页");


            lnkLast.Attributes.Add("title", "末页");


            lnkGo.Attributes.Add("title", "转到");




            lnkFirst.Font.Name = "Webdings";


            lnkPrev.Font.Name = "Webdings";


            lnkNext.Font.Name = "Webdings";


            lnkLast.Font.Name = "Webdings";


            lnkGo.Font.Name = "Webdings";




            lnkPrev.Text = "7";


            lnkFirst.Text = "9";


            lnkNext.Text = "8";


            lnkLast.Text = ":";


            lnkGo.Text = "4";






            lnkGo.Click += new EventHandler(lnkGo_Click);


            lnkPrev.Click += new EventHandler(lnkPrev_Click);


            lnkNext.Click += new EventHandler(lnkNext_Click);


            lnkFirst.Click += new EventHandler(lnkFirst_Click);


            lnkLast.Click += new EventHandler(lnkLast_Click);




            base.CreateChildControls();






        }


        [Browsable(false)]




        public int PageCount




        ...{




            get




            ...{




                try




                ...{




                    if (VirtualItemCount % PageSize > 0)




                    ...{




                        return VirtualItemCount / PageSize + 1;




                    }


                    else




                    ...{




                        return VirtualItemCount / PageSize;




                    }


                }


                catch




                ...{


                    return 0;


                }


            }






        }


        public void SetPage(int pageIndex)




        ...{




            CurrentPageIndex = pageIndex;




            if (pageIndex > PageCount || pageIndex < 0)




                return;




            else




            ...{




                OnPageIndexChanged(null, new PageChangedEventArgs(null, pageIndex));




            }


        }


        public void SetPage(int pageIndex, int pageSize, int virtualItemCount)




        ...{




            _CurrentPageIndex = pageIndex;




            _PageSize = pageSize;




            _VirtualItemCount = virtualItemCount;




            if (pageIndex > PageCount || pageIndex < 0)




                return;




            else




            ...{




                OnPageIndexChanged(null, new PageChangedEventArgs(null, pageIndex));






            }


        }


        [Browsable(false)]


        public int PageSize




        ...{




            get




            ...{




                return _PageSize;




            }


            set




            ...{






                _PageSize = value;


                ViewState.SetItemDirty("PageSize", true);






            }




        }


        [Browsable(false)]


        public int CurrentPageIndex




        ...{




            get




            ...{




                return _CurrentPageIndex;




            }


            set




            ...{






                _CurrentPageIndex = value;


                ViewState.SetItemDirty("CurrentPageIndex", true);








            }




        }


        [Browsable(false)]


        public int VirtualItemCount




        ...{




            get




            ...{




                return _VirtualItemCount;




            }


            set




            ...{






                _VirtualItemCount = value;


                ViewState.SetItemDirty("VirtualItemCount", true);






            }




        }




        private void lnkGo_Click(object sender, EventArgs e)




        ...{




            int newPage;




            try




            ...{


                newPage = int.Parse(txtNewPageNumber.Text.Trim()) - 1;


            }


            catch




            ...{




                return;




            }




            if (PageCount > newPage && PageCount != 0)


                OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));




        }




        public virtual void OnPageIndexChanged(object source, PageChangedEventArgs e)




        ...{




            DateTime start = DateTime.Now;




            if (e.NewPageIndex > PageCount || e.NewPageIndex < 0)




                return;




            else




            ...{




                CurrentPageIndex = e.NewPageIndex;




                if (PageIndexChanged != null)




                ...{




                    PageIndexChanged(source, e);






                }




                DateTime end = DateTime.Now;




                lblCurrentPage.Text = String.Format("(当前在第<B> {0} </B>页 共<B> {1} </B>页 记录数<B> {2} </B>条 [搜索用时 {3}秒])", (CurrentPageIndex + 1), PageCount, VirtualItemCount, (end - start).TotalSeconds);




                txtNewPageNumber.Text = (CurrentPageIndex + 1).ToString();






            }




        }




        private void lnkPrev_Click(object sender, EventArgs e)




        ...{




            int newPage;




            newPage = CurrentPageIndex - 1;


            if (newPage >= 0 && PageCount != 0)


                OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));




        }


        private void lnkFirst_Click(object sender, EventArgs e)




        ...{




            int newPage;




            newPage = 0;


            if (newPage >= 0 && PageCount != 0)


                OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));




        }


        private void lnkLast_Click(object sender, EventArgs e)




        ...{




            int newPage;




            newPage = PageCount - 1;


            if (PageCount > newPage && PageCount != 0)


                OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));




        }




        private void lnkNext_Click(object sender, EventArgs e)




        ...{




            int newPage;




            newPage = CurrentPageIndex + 1;


            if (PageCount > newPage && PageCount != 0)


                OnPageIndexChanged(this, new PageChangedEventArgs(sender, newPage));




        }






        protected override object SaveViewState()




        ...{


            // Check whether the PageSize property exists in 


            // the ViewState property, and if it does, check


            // whether it has changed since the most recent


            // TrackViewState method call.


            if (!((IDictionary)ViewState).Contains("PageSize") || ViewState.IsItemDirty("PageSize"))




            ...{


                ViewState.Remove("PageSize");


                // Add the _PageSize property to the StateBag.


                ViewState.Add("PageSize", _PageSize);


            }


            if (!((IDictionary)ViewState).Contains("CurrentPageIndex") || ViewState.IsItemDirty("CurrentPageIndex"))




            ...{


                ViewState.Remove("CurrentPageIndex");


                // Add the _CurrentPageIndex property to the StateBag.


                ViewState.Add("CurrentPageIndex", _CurrentPageIndex);


            }


            if (!((IDictionary)ViewState).Contains("VirtualItemCount") || ViewState.IsItemDirty("VirtualItemCount"))




            ...{


                ViewState.Remove("VirtualItemCount");


                // Add the _VirtualItemCount property to the StateBag.


                ViewState.Add("VirtualItemCount", _VirtualItemCount);


            }


            return ((IStateManager)ViewState).SaveViewState();


        }


        protected override void LoadViewState(object savedState)




        ...{


            if (savedState != null)


                ((IStateManager)ViewState).LoadViewState(savedState);


            if (ViewState["CurrentPageIndex"] != null)


                _CurrentPageIndex = int.Parse(ViewState["CurrentPageIndex"].ToString());


            if (ViewState["PageSize"] != null)


                _PageSize = int.Parse(ViewState["PageSize"].ToString());


            if (ViewState["VirtualItemCount"] != null)


                _VirtualItemCount = int.Parse(ViewState["VirtualItemCount"].ToString());




        }




        public class PageChangedEventArgs : EventArgs




        ...{


            


            // Fields


            private object commandSource;


            private int newPageIndex;




            public PageChangedEventArgs(object commandSource, int newPageIndex)




            ...{


                this.commandSource = commandSource;


                this.newPageIndex = newPageIndex;


            }


            // Properties


            public object CommandSource




            ...{


                get




                ...{


                    return this.commandSource;


                }


            }


            public int NewPageIndex




            ...{


                get




                ...{


                    return this.newPageIndex;


                }


            }


        


        }




    }




}





 

 通过后台,使用SmartPager转向页面

 


int goToPageIndex = 0;//转向的页码,索引从0开始,0代表第一页


int pageSize = int.Parse(ConfigurationManager.AppSettings["PageSize"]);


int virtualItemCount = GetData();//从数据库中得到要查询的记录总数


pager.SetPage(goToPageIndex , pageSize, virtualItemCount );




//如果试图转向到一个超过最大页面索引的页面,它将不会抛出异常。结果为无效操作!

 

 订阅事件PageIndexChanged

 


protected void pager_PageIndexChanged(object source, SmartPager.PageChangedEventArgs e)




        ...{




            //绑定数据源,数据容器可以为GridView,DataGrid等


           //为了提高数据库效率,后台应使用带有StartRecord和MaxRecords参数的方法


            string searchKey=null;//查询关键字




            gvItem.DataSource = GetDataList(searchKey,e.NewPageIndex * pageSize, pageSize);//根据业务需要自定义的获取数据的方法




            gvItem.DataBind();






        }

http://blog.csdn.net/justinalucard/archive/2006/12/22/1453194.aspx
 转载请注明本贴地址及作者!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息