您可以在这里快速查找:


 
您的位置: 编程学习 > asp.net教程 > 200509
文章分类

Java技术
2005: 03 04 05 06 07 08
09 10 11 12
2006: 01 02

Asp.net
2005: 07 08 09 10 11 12
2006: 01 02

VB编程
2006: 02

Asp编程
2005: 11 12
2006: 01 02

C++/VC
2005: 10 11 12
2006: 01 02

Delphi
2005: 12
2006: 01 02

其它

 本文章适合所有读者

ASP.NET分页组件学与用——教学篇(源代码)

lizanhong

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

 

using System.Text;

 

namespace NSLzhPages

{

   

    public class LzhPages : System.Web.UI.WebControls.WebControl

    {

        private int _count;//每页显示的记录条数

        private int _currentPage;//当前页

        private int _allCount;//所有记录条数

        private int _showPages;//显示页数

 

        //以下脚本用于从文本框输入页码

        private const string SCRIPTSTRING = "<script language=´javascript´>\n" +

                                                " function go(ctrl,max)\n" +

                                                "         {\n" +

                                                "             if(ctrl.value >= 1 && ctrl.value <= max)\n" +

                                                "             {\n" +

                                                "                 var url;\n" +

                                                "                 var index;\n" +

                                                "                 url = location.href;\n" +

                                                "                 index = url.indexOf(´?´);\n" +

                                                "                 if(index == -1)\n" +

                                                "                 {\n" +

                                                "                 }\n" +

                                                "                 else\n" +

                                                "                 {\n" +

                                                "                     url = url.substring(0,index);\n" +

                                                "                 }\n" +

                                                "                 location.href = url + ´?currentPage=´ + ctrl.value;\n" +

           

                                                "             }\n" +

                                                "                 else\n" +

                                                "               {\n" +

                                                "               alert(´您输入的页码必须是符合页面要求的数字,最大值是:´ + max);\n" +

                                                "               return false;\n" +

                                                "               }\n" +

                                                "               }\n" +

                                                "</script>\n";

 

 

        [DefaultValue(10),Category("Customer")]

        public int Count

        {

            set

            {

                if(value <= 0)

                    _count = 1;

                else

                    _count = value;

            }

            get

            {

                return _count;

            }

        }

 

        [DefaultValue(1),Category("Customer")]

        public int CurrentPage

        {

            set

            {

                if(value < 0)

                    _currentPage = 1;

                else

                    _currentPage = value;

            }

            get

            {

                return _currentPage;

            }

        }

 

        [DefaultValue(1),Category("Customer")]

        public int AllCount

        {

            get

            {

                return _allCount;

            }

            set

            {

                if(_allCount < 0)

                    throw new Exception("记录总条数不能为负数");

                else

                    _allCount = value;

            }

        }

 

        [DefaultValue(1),Category("Customer")]

        public int Pages//总页数

        {

            get

            {

                if(this._allCount % this._count > 0)

                    return ((int)this._allCount / this._count) + 1;

                else

                    return ((int)this._allCount / this._count);

            }

        }

 

        [DefaultValue(1),Category("Customer")]

        public int ShowPages

        {

            set

            {

                if(value > 0)

                    _showPages = value;

                else

                    _showPages = 9;

            }

            get

            {

                return _showPages;

            }

        }

 

        protected override void Render(HtmlTextWriter writer)

        {

            base.Render (writer);

 

            string leftInfo;

            StringBuilder centerInfo = new StringBuilder();

 

            //分页条分三部分,leftInfo是最左边的部分,用来显示当前页/总页数,每页显示的记录条数

            leftInfo = "页:" + this.CurrentPage.ToString() + "/" + this.Pages.ToString() + "&nbsp;&nbsp;" + "每页" + this.Count.ToString() + "条" + "&nbsp;&nbsp;共" + this.AllCount.ToString() + "条";    

           

            //中间的部分是分页部分

            int min;//要显示的页面数最小值

            int max;//要显示的页面数最大值

 

            if(this.CurrentPage > this.Pages)//当前页必须小于最大页

            {

                this.CurrentPage = this.Pages;

            }

 

            if(this.CurrentPage % this.ShowPages == 0) //如果恰好整除

            {

                min = this.CurrentPage + 1;

                max = this.CurrentPage + this.ShowPages ;

            }

            else if(this.CurrentPage % this.ShowPages == 1 && this.CurrentPage > this.ShowPages )

            {

                min = (((int)this.CurrentPage / this.ShowPages ) - 1) * this.ShowPages +1;

                max = this.CurrentPage - 1;

            }

            else

            {

                min = ((int)this.CurrentPage / this.ShowPages) * this.ShowPages + 1;

                max = (((int)this.CurrentPage / this.ShowPages) +1) * this.ShowPages;

            }          

 

            string numberStr = "&nbsp;";//循环生成数字序列部分

            string AbsUrl;//URL?左边的部分

            AbsUrl = this.Context.Request.Url.ToString();

            if(AbsUrl.IndexOf("?") == -1)

            {              

            }

            else

            {

                AbsUrl = AbsUrl.Substring(0,AbsUrl.IndexOf("?"));

            }

 

            for(int i = min ; i <= max ; i++)

            {          

                if(i <= this.Pages)//只有不大于最大页才显示

                {

                    if(this.CurrentPage == i)//如果是当前页,用斜体和红色显示

                    {

                        numberStr = numberStr + "<a href=" + AbsUrl + "?currentPage=" + i.ToString() + ">" + "<I style=´color:red´>" + i.ToString() + "</I>" +"</a>" + "\n";

                    }

                    else

                    {

                        numberStr = numberStr + "<a href=" + AbsUrl + "?currentPage=" + i.ToString() + ">" + i.ToString() +"</a>" + "\n";

                    }

                }

            }

 

            //第一页,上一页,下一页,最后一页

            string First,Previous,Next,Last;

            First = AbsUrl + "?currentPage=1";

            /////////

            if(this.CurrentPage == 1)

                Previous = AbsUrl + "?currentPage=1";

            else

                Previous = AbsUrl + "?currentPage=" + (this.CurrentPage - 1).ToString();

            /////////

            if(this.CurrentPage == this.Pages)

                Next = AbsUrl + "?currentPage=" + this.Pages;

            else

                Next = AbsUrl + "?currentPage=" + (this.CurrentPage + 1).ToString();

            /////////

            Last = AbsUrl + "?currentPage=" + this.Pages;

 

            centerInfo.AppendFormat("<font face=´Webdings´ style=´font-size:14px´><a href={0}>7</a><a href={1}>3</a></font>{2}<font face=´Webdings´ style=´font-size:14px´><a href={3}>4</a><a href={4}>8</a></font>",First,Previous,numberStr,Next,Last);

           

            StringBuilder sb = new StringBuilder();//HTML字符串

            sb.AppendFormat("<table style = ´font-size:12px´ border=´0´ cellpadding=´0´ cellspacing=´0´ width=´100%´> \n " +

                "<tr>\n" +

                "<td width=´25%´ align=´left´>{0}</td>\n" +

                "<td width=´61%´ align=´right´>{1}</td>\n" +

                "<td width=´14%´ align=´right´><input type=´text´ name=´T1´ size=´4´ style=´border-bottom:solid 1pt gray;border-top :solid 1pt gray; border-left:solid 1pt gray;border-right:solid 1pt gray;´> \n    <input type=´button´ name=´B1´ size=´6´ value=go style=´border-bottom:solid 1pt gray;border-top :solid 1pt gray; border-left:solid 1pt gray;border-right:solid 1pt gray;´ onclick=´go(T1,{2})´></td>\n" +

                "</tr>\n" +

                "</table>",leftInfo,

                centerInfo.ToString(),

                this.Pages);       

   

            writer.Write(sb.ToString());

        }

 

        protected override void OnPreRender(EventArgs e)

        {

            base.OnPreRender (e);

            if(!Page.IsClientScriptBlockRegistered("WEREW-332DFAF-FDAFDSFDSAFD"))

            {

                Page.RegisterClientScriptBlock("WEREW-332DFAF-FDAFDSFDSAFD",SCRIPTSTRING);

            }

        }

 

    }

}