非常实用分页控件

 

/******************************************************   
FileName:分页控件
create Date: 2008-5-18
description: 暂不支持Postback
 *使用方式:
 *  拖拽控件到页面上
 *  Pager的默认分页方式为页面跳转,设置PageKey属性为你所用的分页QueryString Key,默认值为page,在一个页面上的多个模块使用分页控件时请注意区分各模块的PageKey属性
 *  选择分页方式为JS时,请设置FunctionName属性,此为分页按钮所要调用的js函数名,包含一个页号参数(或更多,但第一个参数为页号),默认为page
 *  在代码里调用Pager1.SetPager(总记录数,总页数,当前页)来设置分页控件
Rewriter:
Rewrite Date:
******************************************************/

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing.Design;
using System.Web.UI.Design;
using System.IO;
using System.Text.RegularExpressions;

/*嵌入资源*/
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Images.first.gif", "image/gif")]
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Images.prev.gif", "image/gif")]
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Images.next.gif", "image/gif")]
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Images.last.gif", "image/gif")]
[assembly: WebResource("Byecity2011.WebSite.Utils.Component.Css.Style.css", "text/css")]
namespace Byecity2011.WebSite.Utils
{
    #region [枚举]

    #region [分页类型枚举]
    /// <summary>
    /// 分页类型,暂不支持Postback
    /// </summary>
    public enum PagerType
    {
        /// <summary>
        /// 用于调用js的分页function,应用于ajax
        /// </summary>
        JS,
        /// <summary>
        /// 用于使用地址重定向
        /// </summary>
        Navigate
    }
    #endregion

    #region [控件的位置枚举]

    /// <summary>
    /// 控件的位置
    /// </summary>
    public enum Position
    {
        /// <summary>
        /// 居左
        /// </summary>
        Left,

        /// <summary>
        /// 居中
        /// </summary>
        Center,

        /// <summary>
        /// 居右
        /// </summary>
        Right
    }

    #endregion

    #endregion

    /// <summary>
    /// 分页控件
    /// </summary>
    [DefaultProperty("PagerType")]
    [ToolboxData("<!--使用PagerType.Navigate时,请指定PageKey属性;使用PagerType.JS时,请指定要调用的js函数名FunctionName属性-->\r\n<{0}:Pager runat=server></{0}:Pager>")]
    [Designer( typeof(PagerDesigner) )]
    public class Pager : WebControl
    {

        #region [分页设置属性]
        bool _SEOPager = false;
        [Browsable(true)]
        [Category("是否SEO伪静态分布")]
        [Description("最后一个 '-' 后的数字为分页号")]
        public bool SEOPager
        {
            get { return _SEOPager; }
            set { _SEOPager = value; }
        }

        bool _FirstPageContainPageNumber = false;
        [Browsable(true)]
        [Category("是否SEO伪静态分布")]
        [Description("第一页是否包含分页号")]
        public bool FirstPageContainPageNumber
        {
            get { return _FirstPageContainPageNumber; }
            set { _FirstPageContainPageNumber = value; }
        }

        private PagerType pagerType = PagerType.Navigate;
        /// <summary>
        /// 分类类型
        /// 使用PagerType.Navigate时,请指定PageKey属性
        /// 使用PagerType.JS时,请指定要调用的js函数名FunctionName属性
        /// </summary>
        [Browsable(true)]
        [Category("分页设置")]
        [Description("分类类型\r\n使用PagerType.Navigate时,请指定PageKey属性;使用PagerType.JS时,请指定要调用的js函数名FunctionName属性")]
        public PagerType PagerType
        {
            get { return pagerType; }
            set { pagerType = value; }
        }
        private string pageKey = "page";

        /// <summary>
        /// 使用PagerType.Navigate时,使用的QueryStringKey
        /// </summary>
        [Browsable(true)]
        [Category("分页设置")]
        [DefaultValue("page")]
        [Description("使用PagerType.Navigate时,使用的QueryStringKey")]
        public string PageKey
        {
            get { return pageKey; }
            set
            {
                if (value.Length > 0)
                    pageKey = value;
            }
        }

        private string functionName = "Page";
        /// <summary>
        /// 使用PagerType.JS时,使用时调用的js函数名
        /// </summary>
        [Browsable(true)]
        [Category("分页设置")]
        [DefaultValue("Page")]
        [Description("使用PagerType.JS时,使用时调用的js函数名")]
        public string FunctionName
        {
            get { return functionName; }
            set
            {
                if (value.Length > 0)
                    functionName = value;
            }
        }

        private int numberButtonCount = 10;
        /// <summary>
        /// 要显示的数字按钮数量,默认10
        /// </summary>
        [Browsable(true)]
        [Category("分页设置")]
        [DefaultValue("10")]
        [Description("要显示的数字按钮数量,默认10")]
        public int NumberButtonCount
        {
            get { return numberButtonCount; }
            set
            {
                if (value > 0)
                    numberButtonCount = value;
            }
        }

        #endregion

        #region [控件样式属性]

        private string divClass = "divContainer";
        /// <summary>
        /// 最外层对象的css
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("divContainer")]
        [Description("最外层对象的css")]
        public string DivClass
        {
            get { return divClass; }
            set { divClass = value; }
        }

        private string tableClass = "divContainer_table";
        /// <summary>
        /// table的css
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("divContainer_table")]
        [Description("table的css")]
        public string TableClass
        {
            get { return tableClass; }
            set { tableClass = value; }
        }

        private string pagerInfoClass = "Pager_td_0";
        /// <summary>
        /// 分页信息样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("Pager_td_0")]
        [Description("分页信息样式")]
        public string PagerInfoClass
        {
            get { return pagerInfoClass; }
            set { pagerInfoClass = value; }
        }

        private string imageButtonClass = "btnImage";
        /// <summary>
        /// 图片按钮的样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("btnImage")]
        [Description("图片按钮的样式")]
        public string ImageButtonClass
        {
            get { return imageButtonClass; }
            set { imageButtonClass = value; }
        }

        private string numberButtonClass = "btnNumber";
        /// <summary>
        /// 数字按钮的样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("btnNumber")]
        [Description("数字按钮的样式")]
        public string NumberButtonClass
        {
            get { return numberButtonClass; }
            set { numberButtonClass = value; }
        }

        private string currentNumberButtonClass = "btnNumberCurrent";
        /// <summary>
        /// 当前数字按钮的样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("btnNumberCurrent")]
        [Description("当前数字按钮的样式")]
        public string CurrentNumberButtonClass
        {
            get { return currentNumberButtonClass; }
            set { currentNumberButtonClass = value; }
        }

        private string numberInputClass = "Pager_td_input";
        /// <summary>
        /// 输入跳转的样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("Pager_td_input")]
        [Description("输入跳转的样式")]
        public string NumberInputClass
        {
            get { return numberInputClass; }
            set { numberInputClass = value; }
        }

        #endregion

        #region [按钮显示属性]

        private bool showHeadEndButton = true;
        /// <summary>
        /// 是否显示首页、上一页、下一页,末页按钮
        /// </summary>
        [Browsable(true)]
        [Category("按钮显示")]
        [DefaultValue("true")]
        [Description("是否显示首页、上一页、下一页,末页按钮")]
        public bool ShowHeadEndButton
        {
            get { return showHeadEndButton; }
            set { showHeadEndButton = value; }
        }

        private bool showUserInput = false;
        /// <summary>
        /// 是否显示用户输入按钮
        /// </summary>
        [Browsable(true)]
        [Category("按钮显示")]
        [DefaultValue("false")]
        [Description("是否显示用户输入按钮")]
        public bool ShowUserInput
        {
            get { return showUserInput; }
            set { showUserInput = value; }
        }

        private bool showNumberButton = true;
        /// <summary>
        /// 是否显示页码按钮
        /// </summary>
        [Browsable(true)]
        [Category("按钮显示")]
        [DefaultValue("true")]
        [Description("是否显示页码按钮")]       
        public bool ShowNumberButton
        {
            get { return showNumberButton; }
            set { showNumberButton = value; }
        }

        private bool showPageInfo = true;
        /// <summary>
        /// 是否显示分页信息
        /// </summary>
        [Browsable(true)]
        [Category("按钮显示")]
        [DefaultValue("true")]
        [Description("是否显示分页信息")]
        public bool ShowPageInfo
        {
            get { return showPageInfo; }
            set { showPageInfo = value; }
        }

        private Position pagerPosition = Position.Left;
        /// <summary>
        /// 分页控件的位置
        /// </summary>
        [Browsable(true)]
        [Category("控件位置")]
        [DefaultValue("Left")]
        [Description("分页控件的位置,左,中,右")]
        public Position PagerPosition
        {
            get { return pagerPosition; }
            set { pagerPosition = value; }
        }

        #endregion

        #region [按钮图片]

        private string firstImage = "";
        /// <summary>
        /// "首页"图片地址
        /// </summary>
        [Browsable(true)]
        [Category("按钮图片")]
        [DefaultValue("")]
        [Description("\"首页\"图片地址")]
        [Editor(typeof(UrlEditor), typeof(UITypeEditor))]
        public string FristImageUrl
        {
            get { return firstImage; }
            set { firstImage = value; }
        }

        private string prevImage = "";
        /// <summary>
        /// "上一页"图片地址
        /// </summary>
        [Browsable(true)]
        [Category("按钮图片")]
        [DefaultValue("")]
        [Description("\"上一页\"图片地址")]
        [Editor(typeof(UrlEditor), typeof(UITypeEditor))]
        public string PrevImageUrl
        {
            get { return prevImage; }
            set { prevImage = value; }
        }

        private string nextImage = "";
        /// <summary>
        /// "首页"图片地址
        /// </summary>
        [Browsable(true)]
        [Category("按钮图片")]
        [DefaultValue("")]
        [Description("\"下一页\"图片地址")]
        [Editor(typeof(UrlEditor), typeof(UITypeEditor))]
        public string NextImageUrl
        {
            get { return nextImage; }
            set { nextImage = value; }
        }

        private string lastImage = "";
        /// <summary>
        /// "末页"图片地址
        /// </summary>
        [Browsable(true)]
        [Category("按钮图片")]
        [DefaultValue("")]
        [Description("\"末页\"图片地址")]
        [Editor( typeof(UrlEditor), typeof(UITypeEditor) )]
        public string LastImageUrl
        {
            get { return lastImage; }
            set { lastImage = value; }
        }


        #endregion
        public string UserInputID
        {
            get { return this.UniqueID + "_userInput"; }
        }
        private int _pageCount;
        public int PageCount
        {
            get { return _pageCount; }
        }

        private string urlFormat = "";
        public string UrlFormatString
        {
            get
            {
                if (urlFormat == "")
                {
                    string url = System.Web.HttpContext.Current.Request.RawUrl.ToLower();
                    string[] keys = System.Web.HttpContext.Current.Request.QueryString.AllKeys;

                    foreach (string key in keys)
                    {
                        if (key.ToLower() == this.PageKey.ToLower())
                        {
                            return url.Replace(string.Format("{0}={1}", key.ToLower(), System.Web.HttpContext.Current.Request.QueryString[key]), string.Format("{0}={1}", key.ToLower(), "{0}"));
                        }
                    }

                    urlFormat = string.Format("{0}{1}{2}={3}", url, url.IndexOf('?') > 0 ? "&" : "?", this.PageKey.ToLower(), "{0}");
                }
                return urlFormat;
            }
        }
        #region [初始化时]

        /// <summary>
        /// 初始化时
        /// </summary>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {
            //注册样式
            if (Page.Header != null)
            {
                //引用样式表文件
                System.Web.UI.HtmlControls.HtmlLink link = new System.Web.UI.HtmlControls.HtmlLink();
                link.Attributes.Add("rel", "stylesheet");
                link.Attributes.Add("type", "text/css");
                link.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl(typeof(Pager), "Byecity.Common.Utils.Component.Css.Style.css"));
                Page.Header.Controls.Add(link);
            }

            //注册用户输入检查
            if (this.ShowUserInput)
            {
                Page.ClientScript.RegisterClientScriptBlock(GetType(), "checkUserInput", "<script>\r\n"
                    + "var pageCount\r\n"
                    + "var urlFormatString = '" + this.UrlFormatString + "'\r\n"
                    + string.Format("var pageType = {0}\r\n", this.PagerType == PagerType.Navigate ? 0 : 1)
                    + string.Format("function {0}_checkInput(id)\r\n", this.UniqueID)
                    + "{\r\n"
                    + "     var v = document.getElementById( id ).value;\r\n"
                    + "     if( v.length == 0 )\r\n"
                    + "     {\r\n"
                    + "         alert('请输入一个数');\r\n"
                    + "         document.getElementById( id ).focus();\r\n"
                    + "         return false;\r\n"
                    + "     }\r\n"
                    + "     for(var i=0;i<v.length;i++)\r\n"
                    + "     {\r\n"
                    + "         if( isNaN(v.charAt( i )) )\r\n"
                    + "         {\r\n"
                    + "             alert('请输入一个有效的数字');\r\n"
                    + "             document.getElementById( id ).focus();\r\n"
                    + "             return false;\r\n"
                    + "         }\r\n"
                    + "     }\r\n"
                    + "     if( parseInt( v ) <= 0)\r\n"
                    + "     {\r\n"
                    + "         alert('请输入大于0的数');\r\n"
                    + "         document.getElementById( id ).focus();\r\n"
                    + "         return false;\r\n"
                    + "     }\r\n"
                    + "     if( parseInt( v ) > pageCount )\r\n"
                    + "     {\r\n"
                    + "         alert('请输入一个不大于'+pageCount+'的数');\r\n"
                    + "         document.getElementById( id ).focus();\r\n"
                    + "         return false;\r\n"
                    + "     }\r\n"
                    + "     var u;\r\n"
                    + "     if(pageType==0){\r\n"
                    + "         if( parseInt( v ) == 1 )\r\n"
                    + "             u = urlFormatString.replace('_{0}','');\r\n"
                    + "         else\r\n"
                    + "             u = urlFormatString.replace('{0}',v);\r\n"
                    + "         document.location.href = u;\r\n"
                    + "     }\r\n"
                    + "     else{\r\n"
                    + "         " + this.FunctionName + "(v);\r\n"
                    + "     }\r\n"
                    + "}\r\n"
                    + "function " + this.UniqueID + "_inputFocus( el )\r\n"
                    + "{\r\n"
                    + "    el.onkeydown = function(){\r\n"
                    + "        if( event.keyCode == 13 )\r\n"
                    + "        {\r\n"
                    + "            " + this.UniqueID + "_checkInput(el.id);\r\n"
                    + "             return false;\r\n"
                    + "        }\r\n"
                    + "    }\r\n"
                    + "    el.onblur = function(){\r\n"
                    + "        this.onkeydown = function(){ return true; }\r\n"
                    + "    }\r\n"
                    + "}\r\n"
                    + "</script>\r\n");
            }

            base.OnInit(e);
        }

        #endregion

        private string html = "\r\n<div class='{0}' align='{1}'>\r\n<table class=\"{2}\">\r\n<tr>\r\n{3}\r\n{4}\r\n{5}</tr>\r\n</table>\r\n</div>\r\n";
        private string pageInfo = "<td class='{2}'>\r\n    <a class='Pager_td_0_a1'>共{0}条记录</a>\r\n    <a class='Pager_td_0_a2'>{1}</a>\r\n</td>";//Pager_td_0
        private string tdButton = "<td class='Pager_td_buttons'>\r\n{0}{1}{2}</td>\r\n";
        private string tdNumberButton = "\r\n{0}\r\n";
        private string tdUserInput = "<td class='{2}'>\r\n   <input id='{0}' type=text class='Pager_td_input_input' οnfοcus='{1}'><a style='cursor:pointer' class='Pager_td_input_go' οnclick='{3}'>go</a>\r\n</td>";//Pager_td_input

        /// <summary>
        /// 输出控件
        /// </summary>
        /// <param name="output"></param>
        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(html);
        }

        /// <summary>
        /// 动态设置分页控件
        /// </summary>
        /// <param name="itemCount"></param>
        /// <param name="pageCount"></param>
        /// <param name="currentNO"></param>
        public void SetPager(int itemCount, int pageCount, int currentNO)
        {
            _pageCount = pageCount;
            Page.ClientScript.RegisterClientScriptBlock(GetType(), "PageCount", string.Format("<script> pageCount={0};</script>", pageCount));

            if (this.NumberButtonCount > pageCount)
                this.NumberButtonCount = pageCount;

            StringBuilder sb = new StringBuilder();
            string tmp = "";
            string[] buttons;
            string[] numberButtons;

            // 数字按钮
            if (ShowNumberButton)
            {
                if (this.NumberButtonCount > 0)
                {
                    numberButtons = createNumberButton(currentNO, pageCount);
                    foreach (string btn in numberButtons)
                    {
                        sb.Append(btn);
                    }
                    tdNumberButton = string.Format(tdNumberButton, sb.ToString());
                }
            }

            // 前后导航          
            if (ShowHeadEndButton)
            {
                buttons = createButton(currentNO, pageCount);
                string s1 = buttons[0] + buttons[1];//head、prev
                string s2 = buttons[2] + buttons[3];//next、end

                tdButton = string.Format( tdButton,s1,ShowNumberButton ? tdNumberButton : "" ,s2 );
            }

            string pageInfoString = "";
            if (this.ShowPageInfo)
            {
                pageInfoString = string.Format(pageInfo, itemCount, string.Format("第{0}页/共{1}页", currentNO, pageCount), this.PagerInfoClass.Length == 0 ? "Pager_td_0" : this.PagerInfoClass);
            }
            if( ShowHeadEndButton )
                tmp = tdButton;
            else if( !ShowHeadEndButton && ShowNumberButton)
                tmp = tdNumberButton;
            else
                tmp = tdNumberButton;

            string goString = "";
            if (this.ShowUserInput)
            {
                string inputID = string.Format("{0}_userInput", this.UniqueID);
                goString = string.Format(tdUserInput, inputID, string.Format("{0}_inputFocus(this)", this.UniqueID), this.NumberInputClass.Length == 0 ? "Pager_td_input" : this.NumberInputClass, string.Format("{0}_checkInput(\"{1}\")", this.UniqueID, inputID));
            }

            html = string.Format(html, this.DivClass, this.PagerPosition.ToString(), this.TableClass, pageInfoString, tmp, goString);
        }

        /// <summary>
        /// 创建首页、上一页、下一页,末页按钮
        /// </summary>
        /// <param name="currentNO"></param>
        /// <param name="pageCount"></param>
        /// <returns></returns>
        string[] createButton(int currentNO,int pageCount)
        {
            string[] images = new string[4];
            string img = "<img border=0 class='_pager_mav_img' src='{0}'>";

            images[0] = this.FristImageUrl.Length > 0 ? this.FristImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity2011.WebSite.Utils.Component.Images.first.gif"));
            images[1] = this.PrevImageUrl.Length > 0 ? this.PrevImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity2011.WebSite.Utils.Component.Images.prev.gif"));
            images[2] = this.NextImageUrl.Length > 0 ? this.NextImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity2011.WebSite.Utils.Component.Images.next.gif"));
            images[3] = this.LastImageUrl.Length > 0 ? this.LastImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity2011.WebSite.Utils.Component.Images.last.gif"));

            List<string> buttons = new List<string>();
            string button;
            string imageButtonCss = this.ImageButtonClass.Length == 0 ? "btnImage" : this.ImageButtonClass;
            #region 设置前后导航

            if (pageCount == 0 || pageCount == 1)
            {
                button = " ";
                buttons.Add(button);

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);
            }
            else if (currentNO == 1 && currentNO != pageCount)
            {
                //第一页 && 不是最后一页
                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);
                if (this.PagerType == PagerType.JS)
                {
                    button = string.Format("    <a href='javascript:;' title='下一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO + 1, "&gt;下一页"/*images[2]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='最后一页' class='{3}' οnclick='{0}({1})'>{2}</a>", this.FunctionName, pageCount, "尾页"/*images[3]*/, imageButtonCss);
                    buttons.Add(button);
                }
                else
                {
                    button = string.Format("    <a href='{0}' title='下一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO + 1), "&gt;下一页"/*images[2]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='最后一页' class='{2}' target='_self'>{1}</a>", this.CreateLink(pageCount), "尾页"/*images[3]*/, imageButtonCss);
                    buttons.Add(button);
                }
            }
            else if (currentNO != 1 && currentNO == pageCount)
            {
                //不是第一页 && 最后一页
                if (this.PagerType == PagerType.JS)
                {
                    button = string.Format("    <a href='javascript:;' title='第一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, 1, "首页"/*images[0]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='上一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO - 1, "上一页&lt;"/*images[1]*/, imageButtonCss);
                    buttons.Add(button);
                }
                else
                {
                    button = string.Format("    <a href='{0}' title='第一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(1), "首页"/*images[0]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='上一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO - 1), "上一页&lt;"/*images[1]*/, imageButtonCss);
                    buttons.Add(button);
                }

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);
            }
            else if (currentNO != 1 && currentNO != pageCount)
            {
                //不是第一页 && 不是最后一页
                if (this.PagerType == PagerType.JS)
                {

                    button = string.Format("    <a href='javascript:;' title='第一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, 1, "首页"/*images[0]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='上一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO - 1, "上一页&lt;"/*images[1]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='下一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO + 1, "&gt;下一页"/*images[2]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='最后一页' class='{3}' οnclick='{0}({1})'>{2}</a>", this.FunctionName, pageCount, "尾页"/*images[3]*/, imageButtonCss);
                    buttons.Add(button);
                }
                else
                {
                    button = string.Format("    <a href='{0}' title='第一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(1), "首页"/*images[0]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='上一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO - 1), "上一页&lt;"/*images[1]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='下一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO + 1), "&gt;下一页"/*images[2]*/, imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='最后一页' class='{2}' target='_self'>{1}</a>", this.CreateLink(pageCount), "尾页"/*images[3]*/, imageButtonCss);
                    buttons.Add(button);
                }
            }
            else
            {
                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);
            }

            #endregion

            return buttons.ToArray();
        }

        /// <summary>
        /// 创建页码按钮
        /// </summary>
        /// <param name="currentNO">当前页码</param>
        /// <param name="pageCount">显示页码数量</param>
        /// <returns></returns>
        string[] createNumberButton(int currentNO,int pageCount)
        {
            List<string> buttons = new List<string>();
            string button;
            int no, fromNO;

            if ((currentNO + 4) <= this.NumberButtonCount)//currentNO + 4 在 1 到 linksCount-4 之间
            {
                fromNO = 1;
            }
            else if ((currentNO + 4) > this.NumberButtonCount && (currentNO + 4) <= pageCount) // currentNO + 4 在 linksCount-4 到 PageQty 之间
            {
                fromNO = currentNO - (this.NumberButtonCount - 5);
            }
            else //currentNO + 4 > PageQty
            {
                fromNO = pageCount - this.NumberButtonCount + 1;
            }

            for (int i = 1; i <= this.NumberButtonCount; i++)
            {
                no = fromNO + i - 1;

                if (no == currentNO)
                    button = string.Format("    <a class='{1}'>{0}</a>\r\n", no, this.CurrentNumberButtonClass.Length == 0 ? "btnNumberCurrent" : this.CurrentNumberButtonClass);
                else
                {
                    if (this.PagerType == PagerType.JS)
                        button = string.Format("    <a href='javascript:;' title='第{2}页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, no, no, this.NumberButtonClass.Length == 0 ? "btnNumber" : this.NumberButtonClass);
                    else
                        button = string.Format("    <a href='{0}' title='第{2}页' class='{3}' target='_self'>{1}</a>\r\n", CreateLink(no), no, no, this.NumberButtonClass.Length == 0 ? "btnNumber" : this.NumberButtonClass);
                }
               
                buttons.Add(button);
            }

            return buttons.ToArray();
        }

        /// <summary>
        /// 使用PagerType.Navigate时,用于生成按钮的链接地址
        /// </summary>
        /// <param name="no"></param>
        /// <returns></returns>
        string CreateLink(int no)
        {
            if( DesignMode )
                return "#";

            string url = System.Web.HttpContext.Current.Request.RawUrl.ToLower();

            if ( !SEOPager )
            {
                string[] keys = System.Web.HttpContext.Current.Request.QueryString.AllKeys;

                foreach ( string key in keys )
                {
                    if ( key.ToLower() == this.PageKey.ToLower() )
                    {
                        return url.Replace( string.Format( "{0}={1}", key.ToLower(), System.Web.HttpContext.Current.Request.QueryString[key] ), string.Format( "{0}={1}", key.ToLower(), no ) );
                    }
                }

                return string.Format( "{0}{1}{2}={3}", url, url.IndexOf( '?' ) > 0 ? "&" : "?", this.PageKey.ToLower(), no );
            }
            else
            {
                string extention = "." + url.GetExtention();
                string fileName = url.GetFileName();

                string name;
                if ( FirstPageContainPageNumber )
                {
                    if ( fileName.LastIndexOf( '-' ) > 0 )
                        name = fileName.Substring( 0, fileName.LastIndexOf( '-' ) );
                    else
                        name = fileName;
                }
                else
                    name = fileName;

                name = HttpUtility.UrlEncode( name );
                string u = url.Substring( 0, url.LastIndexOf( '/' ) + 1 );

                if ( no == 1 )
                    u = u + name + extention;
                else
                    u = u + name + "-" + no.ToString() + extention;
                return u;
            }
        }
    }
    /// <summary>
    /// 分页控件
    /// </summary>
    [DefaultProperty("PagerType")]
    [ToolboxData("<{0}:SeoPager runat=server></{0}:SeoPager>")]
    [Designer( typeof(PagerDesigner) )]
    public class SeoPager : WebControl
    {

        #region [分页设置属性]

        private PagerType pagerType = PagerType.Navigate;
        /// <summary>
        /// 分类类型
        /// 使用PagerType.Navigate时,请指定PageKey属性
        /// 使用PagerType.JS时,请指定要调用的js函数名FunctionName属性
        /// </summary>
        [Browsable(true)]
        [Category("分页设置")]
        [Description("分类类型\r\n使用PagerType.Navigate时,请指定PageKey属性;使用PagerType.JS时,请指定要调用的js函数名FunctionName属性")]
        public PagerType PagerType
        {
            get { return pagerType; }
            set { pagerType = value; }
        }
       
        private string functionName = "Page";
        /// <summary>
        /// 使用PagerType.JS时,使用时调用的js函数名
        /// </summary>
        [Browsable(true)]
        [Category("分页设置")]
        [DefaultValue("Page")]
        [Description("使用PagerType.JS时,使用时调用的js函数名")]
        public string FunctionName
        {
            get { return functionName; }
            set
            {
                if (value.Length > 0)
                    functionName = value;
            }
        }

        private int numberButtonCount = 10;
        /// <summary>
        /// 要显示的数字按钮数量,默认10
        /// </summary>
        [Browsable(true)]
        [Category("分页设置")]
        [DefaultValue("10")]
        [Description("要显示的数字按钮数量,默认10")]
        public int NumberButtonCount
        {
            get { return numberButtonCount; }
            set
            {
                if (value > 0)
                    numberButtonCount = value;
            }
        }

        #endregion

        #region [控件样式属性]

        private string divClass = "divContainer";
        /// <summary>
        /// 最外层对象的css
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("divContainer")]
        [Description("最外层对象的css")]
        public string DivClass
        {
            get { return divClass; }
            set { divClass = value; }
        }

        private string tableClass = "divContainer_table";
        /// <summary>
        /// table的css
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("divContainer_table")]
        [Description("table的css")]
        public string TableClass
        {
            get { return tableClass; }
            set { tableClass = value; }
        }

        private string pagerInfoClass = "Pager_td_0";
        /// <summary>
        /// 分页信息样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("Pager_td_0")]
        [Description("分页信息样式")]
        public string PagerInfoClass
        {
            get { return pagerInfoClass; }
            set { pagerInfoClass = value; }
        }

        private string imageButtonClass = "btnImage";
        /// <summary>
        /// 图片按钮的样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("btnImage")]
        [Description("图片按钮的样式")]
        public string ImageButtonClass
        {
            get { return imageButtonClass; }
            set { imageButtonClass = value; }
        }

        private string numberButtonClass = "btnNumber";
        /// <summary>
        /// 数字按钮的样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("btnNumber")]
        [Description("数字按钮的样式")]
        public string NumberButtonClass
        {
            get { return numberButtonClass; }
            set { numberButtonClass = value; }
        }

        private string currentNumberButtonClass = "btnNumberCurrent";
        /// <summary>
        /// 当前数字按钮的样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("btnNumberCurrent")]
        [Description("当前数字按钮的样式")]
        public string CurrentNumberButtonClass
        {
            get { return currentNumberButtonClass; }
            set { currentNumberButtonClass = value; }
        }

        private string numberInputClass = "Pager_td_input";
        /// <summary>
        /// 输入跳转的样式
        /// </summary>
        [Browsable(true)]
        [Category("控件样式")]
        [DefaultValue("Pager_td_input")]
        [Description("输入跳转的样式")]
        public string NumberInputClass
        {
            get { return numberInputClass; }
            set { numberInputClass = value; }
        }

        #endregion

        #region [按钮显示属性]

        private bool showHeadEndButton = true;
        /// <summary>
        /// 是否显示首页、上一页、下一页,末页按钮
        /// </summary>
        [Browsable(true)]
        [Category("按钮显示")]
        [DefaultValue("true")]
        [Description("是否显示首页、上一页、下一页,末页按钮")]
        public bool ShowHeadEndButton
        {
            get { return showHeadEndButton; }
            set { showHeadEndButton = value; }
        }

        private bool showUserInput = false;
        /// <summary>
        /// 是否显示用户输入按钮
        /// </summary>
        [Browsable(true)]
        [Category("按钮显示")]
        [DefaultValue("false")]
        [Description("是否显示用户输入按钮")]
        public bool ShowUserInput
        {
            get { return showUserInput; }
            set { showUserInput = value; }
        }

        private bool showNumberButton = true;
        /// <summary>
        /// 是否显示页码按钮
        /// </summary>
        [Browsable(true)]
        [Category("按钮显示")]
        [DefaultValue("true")]
        [Description("是否显示页码按钮")]       
        public bool ShowNumberButton
        {
            get { return showNumberButton; }
            set { showNumberButton = value; }
        }

        private bool showPageInfo = true;
        /// <summary>
        /// 是否显示分页信息
        /// </summary>
        [Browsable(true)]
        [Category("按钮显示")]
        [DefaultValue("true")]
        [Description("是否显示分页信息")]
        public bool ShowPageInfo
        {
            get { return showPageInfo; }
            set { showPageInfo = value; }
        }

        private Position pagerPosition = Position.Left;
        /// <summary>
        /// 分页控件的位置
        /// </summary>
        [Browsable(true)]
        [Category("控件位置")]
        [DefaultValue("Left")]
        [Description("分页控件的位置,左,中,右")]
        public Position PagerPosition
        {
            get { return pagerPosition; }
            set { pagerPosition = value; }
        }

        #endregion

        #region [按钮图片]

        private string firstImage = "";
        /// <summary>
        /// "首页"图片地址
        /// </summary>
        [Browsable(true)]
        [Category("按钮图片")]
        [DefaultValue("")]
        [Description("\"首页\"图片地址")]
        [Editor(typeof(UrlEditor), typeof(UITypeEditor))]
        public string FristImageUrl
        {
            get { return firstImage; }
            set { firstImage = value; }
        }

        private string prevImage = "";
        /// <summary>
        /// "上一页"图片地址
        /// </summary>
        [Browsable(true)]
        [Category("按钮图片")]
        [DefaultValue("")]
        [Description("\"上一页\"图片地址")]
        [Editor(typeof(UrlEditor), typeof(UITypeEditor))]
        public string PrevImageUrl
        {
            get { return prevImage; }
            set { prevImage = value; }
        }

        private string nextImage = "";
        /// <summary>
        /// "首页"图片地址
        /// </summary>
        [Browsable(true)]
        [Category("按钮图片")]
        [DefaultValue("")]
        [Description("\"下一页\"图片地址")]
        [Editor(typeof(UrlEditor), typeof(UITypeEditor))]
        public string NextImageUrl
        {
            get { return nextImage; }
            set { nextImage = value; }
        }

        private string lastImage = "";
        /// <summary>
        /// "末页"图片地址
        /// </summary>
        [Browsable(true)]
        [Category("按钮图片")]
        [DefaultValue("")]
        [Description("\"末页\"图片地址")]
        [Editor( typeof(UrlEditor), typeof(UITypeEditor) )]
        public string LastImageUrl
        {
            get { return lastImage; }
            set { lastImage = value; }
        }


        #endregion

        public string UserInputID
        {
            get { return this.UniqueID + "_userInput"; }
        }
        private int _pageCount;
        public int PageCount
        {
            get { return _pageCount; }
        }

        private string urlFormat = "";
        public string UrlFormatString
        {
            get
            {
                if (urlFormat == "")
                {
                    string url = System.Web.HttpContext.Current.Request.RawUrl.ToLower();
                    string extention = System.IO.Path.GetExtension(url);
                    string fileName = System.IO.Path.GetFileNameWithoutExtension(url);

                    string name;
                    if (fileName.LastIndexOf('_') > 0)
                        name = fileName.Substring(0, fileName.LastIndexOf('_'));
                    else
                        name = fileName;

                    string u = url.Substring(0, url.LastIndexOf('/') + 1);

                    urlFormat = u + name + "_{0}" + extention;
                }
                return urlFormat;
            }
        }
        #region [初始化时]

        /// <summary>
        /// 初始化时
        /// </summary>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {
            //注册样式
            if (Page.Header != null)
            {
                //引用样式表文件
                System.Web.UI.HtmlControls.HtmlLink link = new System.Web.UI.HtmlControls.HtmlLink();
                link.Attributes.Add("rel", "stylesheet");
                link.Attributes.Add("type", "text/css");
                link.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl(typeof(SeoPager), "Byecity.Information.Web.Component.Css.Style.css"));
                //Page.Header.Controls.Add(link);
            }

            //注册用户输入检查
            if (this.ShowUserInput)
            {
                Page.ClientScript.RegisterClientScriptBlock(GetType(), "checkUserInput", "<script>\r\n"
                    + "var pageCount\r\n"
                    + "var urlFormatString = '"+ this.UrlFormatString +"'\r\n"
                    + string.Format("var pageType = {0}\r\n",this.PagerType == PagerType.Navigate ? 0 : 1)
                    + string.Format("function {0}_checkInput(id)\r\n", this.UniqueID)
                    + "{\r\n"
                    + "     var v = document.getElementById( id ).value;\r\n"
                    + "     if( v.length == 0 )\r\n"
                    + "     {\r\n"
                    + "         alert('请输入一个数');\r\n"
                    + "         document.getElementById( id ).focus();\r\n"
                    + "         return false;\r\n"
                    + "     }\r\n"
                    + "     for(var i=0;i<v.length;i++)\r\n"
                    + "     {\r\n"
                    + "         if( isNaN(v.charAt( i )) )\r\n"
                    + "         {\r\n"
                    + "             alert('请输入一个有效的数字');\r\n"
                    + "             document.getElementById( id ).focus();\r\n"
                    + "             return false;\r\n"
                    + "         }\r\n"
                    + "     }\r\n"
                    + "     if( parseInt( v ) <= 0)\r\n"
                    + "     {\r\n"
                    + "         alert('请输入大于0的数');\r\n"
                    + "         document.getElementById( id ).focus();\r\n"
                    + "         return false;\r\n"
                    + "     }\r\n"
                    + "     if( parseInt( v ) > pageCount )\r\n"
                    + "     {\r\n"
                    + "         alert('请输入一个不大于'+pageCount+'的数');\r\n"
                    + "         document.getElementById( id ).focus();\r\n"
                    + "         return false;\r\n"
                    + "     }\r\n"
                    + "     var u;\r\n"
                    + "     if(pageType==0){\r\n"
                    + "         if( parseInt( v ) == 1 )\r\n"
                    + "             u = urlFormatString.replace('_{0}','');\r\n"
                    + "         else\r\n"
                    + "             u = urlFormatString.replace('{0}',v);\r\n"                       
                    + "         document.location.href = u;\r\n"
                    + "     }\r\n"
                    + "     else{\r\n"
                    + "         " + this.FunctionName + "(v);\r\n"
                    + "     }\r\n"
                    + "}\r\n"
                    + "function " + this.UniqueID + "_inputFocus( el )\r\n"
                    + "{\r\n"
                    + "    el.onkeydown = function(){\r\n"
                    + "        if( event.keyCode == 13 )\r\n"
                    + "        {\r\n"
                    + "            " + this.UniqueID + "_checkInput(el.id);\r\n"
                    + "             return false;\r\n"
                    + "        }\r\n"
                    + "    }\r\n"
                    + "    el.onblur = function(){\r\n"
                    + "        this.onkeydown = function(){ return true; }\r\n"
                    + "    }\r\n"
                    + "}\r\n"
                    + "</script>\r\n");
              
            }
           

            base.OnInit(e);
        }

        #endregion

        private string html = "\r\n<div class='{0}' align='{1}'>\r\n<table class=\"{2}\">\r\n<tr>\r\n{3}\r\n{4}\r\n{5}</tr>\r\n</table>\r\n</div>\r\n";
        private string pageInfo = "<td class='{2}'>\r\n    <a class='Pager_td_0_a1'>{0}</a>\r\n    <a class='Pager_td_0_a2'>{1}</a>\r\n</td>";//Pager_td_0
        private string tdButton = "<td class='Pager_td_buttons'>\r\n{0}{1}{2}</td>\r\n";
        private string tdNumberButton = "\r\n{0}\r\n";
        private string tdUserInput = "<td class='{2}'>\r\n   <input id='{0}' type=text class='Pager_td_input_input' οnfοcus='{1}'><a style='cursor:pointer' class='Pager_td_input_go' οnclick='{3}'>go</a>\r\n</td>";//Pager_td_input

        /// <summary>
        /// 输出控件
        /// </summary>
        /// <param name="output"></param>
        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(html);
        }

        /// <summary>
        /// 动态设置分页控件
        /// </summary>
        /// <param name="itemCount"></param>
        /// <param name="pageCount"></param>
        /// <param name="currentNO"></param>
        public void SetPager(int itemCount, int pageCount, int currentNO)
        {
            _pageCount = pageCount;
            Page.ClientScript.RegisterClientScriptBlock(GetType(), "PageCount", string.Format("<script> pageCount={0};</script>", pageCount));
            if (this.NumberButtonCount > pageCount)
                this.NumberButtonCount = pageCount;

            StringBuilder sb = new StringBuilder();
            string tmp = "";
            string[] buttons;
            string[] numberButtons;

            // 数字按钮
            if (ShowNumberButton)
            {
                if (this.NumberButtonCount > 0)
                {
                    numberButtons = createNumberButton(currentNO, pageCount);
                    foreach (string btn in numberButtons)
                    {
                        sb.Append(btn);
                    }
                    tdNumberButton = string.Format(tdNumberButton, sb.ToString());
                }
            }

            // 前后导航          
            if (ShowHeadEndButton)
            {
                buttons = createButton(currentNO, pageCount);
                string s1 = buttons[0] + buttons[1];//head、prev
                string s2 = buttons[2] + buttons[3];//next、end

                tdButton = string.Format( tdButton,s1,ShowNumberButton ? tdNumberButton : "" ,s2 );
            }

            string pageInfoString = "";
            if (this.ShowPageInfo)
            {
                pageInfoString = string.Format(pageInfo, itemCount, string.Format("{0}/{1}", currentNO, pageCount), this.PagerInfoClass.Length == 0 ? "Pager_td_0" : this.PagerInfoClass);
            }
            if( ShowHeadEndButton )
                tmp = tdButton;
            else if( !ShowHeadEndButton && ShowNumberButton)
                tmp = tdNumberButton;
            else
                tmp = tdNumberButton;

            string goString = "";
            if (this.ShowUserInput)
            {
                string inputID = string.Format("{0}_userInput", this.UniqueID);
                goString = string.Format(tdUserInput, inputID, string.Format("{0}_inputFocus(this)", this.UniqueID), this.NumberInputClass.Length == 0 ? "Pager_td_input" : this.NumberInputClass, string.Format("{0}_checkInput(\"{1}\")", this.UniqueID, inputID));
            }

            html = string.Format(html, this.DivClass, this.PagerPosition.ToString(), this.TableClass, pageInfoString, tmp, goString);
        }

        /// <summary>
        /// 创建首页、上一页、下一页,末页按钮
        /// </summary>
        /// <param name="currentNO"></param>
        /// <param name="pageCount"></param>
        /// <returns></returns>
        string[] createButton(int currentNO,int pageCount)
        {
            string[] images = new string[4];
            string img = "<img border=0 class='_pager_mav_img' src='{0}'>";

            images[0] = this.FristImageUrl.Length > 0 ? this.FristImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity.Information.Web.Component.Images.first.gif"));
            images[1] = this.PrevImageUrl.Length > 0 ? this.PrevImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity.Information.Web.Component.Images.prev.gif"));
            images[2] = this.NextImageUrl.Length > 0 ? this.NextImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity.Information.Web.Component.Images.next.gif"));
            images[3] = this.LastImageUrl.Length > 0 ? this.LastImageUrl : string.Format(img, Page.ClientScript.GetWebResourceUrl(GetType(), "Byecity.Information.Web.Component.Images.last.gif"));

            List<string> buttons = new List<string>();
            string button;
            string imageButtonCss = this.ImageButtonClass.Length == 0 ? "btnImage" : this.ImageButtonClass;
            #region 设置前后导航

            if (pageCount == 0 || pageCount == 1)
            {
                button = " ";
                buttons.Add(button);

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);
            }
            else if (currentNO == 1 && currentNO != pageCount)
            {
                //第一页 && 不是最后一页
                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);
                if (this.PagerType == PagerType.JS)
                {
                    button = string.Format("    <a href='javascript:;' title='下一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO + 1, ">下一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='最后一页' class='{3}' οnclick='{0}({1})'>{2}</a>", this.FunctionName, pageCount, "最后一页", imageButtonCss);
                    buttons.Add(button);
                }
                else
                {
                    button = string.Format("    <a href='{0}' title='下一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO + 1), ">下一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='最后一页' class='{2}' target='_self'>{1}</a>", this.CreateLink(pageCount), "最后一页", imageButtonCss);
                    buttons.Add(button);
                }
            }
            else if (currentNO != 1 && currentNO == pageCount)
            {
                //不是第一页 && 最后一页
                if (this.PagerType == PagerType.JS)
                {
                    button = string.Format("    <a href='javascript:;' title='第一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, 1, "第一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='上一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO - 1, "上一页<", imageButtonCss);
                    buttons.Add(button);
                }
                else
                {
                    button = string.Format("    <a href='{0}' title='第一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(1), "第一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='上一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO - 1), "上一页<", imageButtonCss);
                    buttons.Add(button);
                }

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);
            }
            else if (currentNO != 1 && currentNO != pageCount)
            {
                //不是第一页 && 不是最后一页
                if (this.PagerType == PagerType.JS)
                {

                    button = string.Format("    <a href='javascript:;' title='第一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, 1, "第一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='上一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO - 1, "上一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='下一页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, currentNO + 1, "下一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='javascript:;' title='最后一页' class='{3}' οnclick='{0}({1})'>{2}</a>", this.FunctionName, pageCount, "最后一页", imageButtonCss);
                    buttons.Add(button);
                }
                else
                {
                    button = string.Format("    <a href='{0}' title='第一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(1), "第一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='上一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO - 1), "上一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='下一页' class='{2}' target='_self'>{1}</a>\r\n", this.CreateLink(currentNO + 1), "下一页", imageButtonCss);
                    buttons.Add(button);

                    button = string.Format("    <a href='{0}' title='最后一页' class='{2}' target='_self'>{1}</a>", this.CreateLink(pageCount), "最后一页", imageButtonCss);
                    buttons.Add(button);
                }
            }
            else
            {
                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);

                button = "";
                buttons.Add(button);
            }

            #endregion

            return buttons.ToArray();
        }

        /// <summary>
        /// 创建页码按钮
        /// </summary>
        /// <param name="currentNO">当前页码</param>
        /// <param name="pageCount">显示页码数量</param>
        /// <returns></returns>
        string[] createNumberButton(int currentNO,int pageCount)
        {
            List<string> buttons = new List<string>();
            string button;
            int no, fromNO;

            if ((currentNO + 2) <= this.NumberButtonCount)//currentNO + 2 在 1 到 linksCount-2 之间
            {
                fromNO = 1;
            }
            else if ((currentNO + 2) > this.NumberButtonCount && (currentNO + 2) <= pageCount) // currentNO + 2 在 linksCount-2 到 PageQty 之间
            {
                fromNO = currentNO - (this.NumberButtonCount - 3);
            }
            else //currentNO + 2 > PageQty
            {
                fromNO = pageCount - this.NumberButtonCount + 1;
            }

            for (int i = 1; i <= this.NumberButtonCount; i++)
            {
                no = fromNO + i - 1;

                if (no == currentNO)
                    button = string.Format("    <a class='{1}'>{0}</a>\r\n", no, this.CurrentNumberButtonClass.Length == 0 ? "btnNumberCurrent" : this.CurrentNumberButtonClass);
                else
                {
                    if (this.PagerType == PagerType.JS)
                        button = string.Format("    <a href='javascript:;' title='第{2}页' class='{3}' οnclick='{0}({1})'>{2}</a>\r\n", this.FunctionName, no, no, this.NumberButtonClass.Length == 0 ? "btnNumber" : this.NumberButtonClass);
                    else
                        button = string.Format("    <a href='{0}' title='第{2}页' class='{3}' target='_self'>{1}</a>\r\n", CreateLink(no), no, no, this.NumberButtonClass.Length == 0 ? "btnNumber" : this.NumberButtonClass);
                }
               
                buttons.Add(button);
            }

            return buttons.ToArray();
        }

        /// <summary>
        /// 使用PagerType.Navigate时,用于生成按钮的链接地址
        /// </summary>
        /// <param name="no"></param>
        /// <returns></returns>
        string CreateLink(int no)
        {
            if( DesignMode )
                return "#";

            string url = HttpContext.Current.Request.RawUrl.ToLower();
            string extention = Path.GetExtension(url);
            string fileName = Path.GetFileNameWithoutExtension(url);

            string name;
            if( Regex.IsMatch(fileName, @"([\w\s]+)-(\d+)", RegexOptions.IgnoreCase ) )
            //if (fileName.LastIndexOf('-') > 0)
                name = fileName.Substring(0, fileName.LastIndexOf('-'));
            else
                name = fileName;

            name = HttpUtility.UrlEncode(name);
            string u = url.Substring(0, url.LastIndexOf('/') + 1);

            if (no == 1)
                u = u + name + extention;
            else
                u = u + name + "-" + no.ToString() + extention;
            return u;
            //return HttpContext.Current.Server.UrlEncode(u).Replace("%2f","/");
        }
    }

    #region [Designer]

    /// <summary>
    /// 验证码图片设计器
    /// </summary>
    public class PagerDesigner : ControlDesigner
    {
        private string html = "\r\n<div class='{0}' align='{1}'>\r\n<table class=\"{2}\">\r\n<tr>\r\n{3}\r\n{4}\r\n{5}</tr>\r\n</table>\r\n</div>\r\n";
        private string pageInfo = "<td class='Pager_td_0'>\r\n    <a class='Pager_td_0_a1'>{0}</a>\r\n    <a class='Pager_td_0_a2'>{1}</a>\r\n</td>";
        private string tdButton = "<td class='Pager_td_buttons'>\r\n{0}{1}{2}</td>\r\n";
        //private string tdNumberButton = "\r\n{0}\r\n";
        private string tdUserInput = "<td class='Pager_td_input'>\r\n   <input id='{0}' type=text class='Pager_td_input_input' style='border:1px #ccc solid;width:45px;height:18px;'><a style='cursor:pointer' class='Pager_td_input_go' οnclick='{1}' style='padding-left:2px;margin-left:2px; text-decoration:none;color:black;border:1px #ccc solid;text-align:center;font-size:18px; width:22px; height:20px; line-height:20px;'>go</a>\r\n</td>";
        /// <summary>
        /// 返回HTML
        /// </summary>
        /// <returns></returns>
        public override string GetDesignTimeHtml()
        {
            string pageInfoString = string.Format(pageInfo, "<a style='width:20px;height:1px;border:1px #ccc solid;'>1</a>", "<a style='margin-left:2px;width:20px;height:1px;border:1px #ccc solid;'>1/1</a>");
            string tmp = string.Format(tdButton, "", "<a style='width:20px;height:1px;border:1px #ccc solid;'>1</a>", string.Format(tdUserInput,"tempID","return true;"));
            string goString = "";
            return string.Format(html, "", "Middle", "", pageInfoString, tmp, goString);
        }
    }

    #endregion
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值