`

最新page页码生成控件代码

阅读更多

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.Text.RegularExpressions;
using System.Collections;
namespace WebPages
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:Pages runat=\"server\"></{0}:Pages>")]
    public class Pages : WebControl
    {
        private int _CuttentPage;
        private int _NumCount;
        private int _PageSize = 1;
        private string _Url = "";
        private string _RewriteFormat = "";
        private string _RewriteRegex = "";
        private Dictionary<string, string> _regs;
        private string _CurrentCss;
        public int CurrentPage
        {
            set
            {
                if (Regex.IsMatch(Convert.ToString(value), "^\\d+$"))
                {
                    this._CuttentPage = Convert.ToInt32(value);
                }
                else
                {
                    this._CuttentPage = 0;
                }
            }
            get
            {
                return this._CuttentPage;
            }
        }
        public int NumCount
        {
            set
            {
                if (Regex.IsMatch(Convert.ToString(value), "^\\d+$"))
                {
                    this._NumCount = Convert.ToInt32(value);
                }
                else
                {
                    this._NumCount = 0;
                }
            }
            get
            {
                return this._NumCount;
            }
        }
        public int PageSize
        {
            set
            {
                if (Regex.IsMatch(Convert.ToString(value), "^\\d+$"))
                {
                    this._PageSize = Convert.ToInt32(value);
                }
                else
                {
                    this._PageSize = 1;
                }
            }
            get
            {
                return this._PageSize;
            }
        }
        //地址
        public string Url
        {
            set
            {
                _Url = value;
            }
            get
            {
                if (string.IsNullOrEmpty(_Url))
                {
                    try
                    {
                        _Url = this.Parent.Page.Request.RawUrl.ToString();
                    }
                    catch
                    {

                        _Url = "";
                    }
                 
                }
                return this._Url;
            }
        }
        public string RewriteFormat
        {
            set { this._RewriteFormat = value; }
            get { return this._RewriteFormat; }
        }
        public string RewriteRegex
        {
            set { _RewriteRegex = value; }
            get { return this._RewriteRegex; }
        }
        public string CurrentCss
        {
            set { _CurrentCss = value; }
            get {
                if (string.IsNullOrEmpty(_CurrentCss))
                    _CurrentCss = "";
                return this._CurrentCss; }
        }
        public Dictionary<string, string> Regs
        {
            set {
                this._regs = value;
            }
            get {
                if (_regs == null) {
                    _regs = new Dictionary<string, string>();              
                }                
                return _regs;
            }
        }

        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }

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


        protected string getUrl(string url)
        {
            MatchCollection mats = Regex.Matches(url, "(?<first>[\\w]*)=(?<two>[^&]*[\u4e00-\u9fa5]+[^&]*)", RegexOptions.IgnoreCase | RegexOptions.Multiline);
            foreach (Match mat in mats)
            {
          
                url = url.Replace(mat.Groups["first"].Value + "=" + mat.Groups["two"].Value, mat.Groups["first"].Value + "=" + HttpUtility.UrlEncodeUnicode(mat.Groups["two"].Value.Trim()));
             }
            return url;
        }
        /// <summary>
        /// 根据当前的页数显示的当前页的底部分页
        /// </summary>
        /// <param name="current"></param>
        /// <param name="size"></param>
        /// <param name="zong"></param>
        /// <returns></returns>
        protected string GetPage(int current, int size, int zong)
        {
            string url = this.Url;
            url = getUrl(url).ToLower();
          
            string urltemp ="";
            urltemp = url.IndexOf("page=") >= 0 ? (Regex.Replace(url, "page=([^&]*)", "page={0}",RegexOptions.Multiline|RegexOptions.Singleline|RegexOptions.IgnoreCase)) : (url.IndexOf("?") >= 0 ? (url + "&page={0}") : (url + "?page={0}"));
            if(this.RewriteFormat.Length>0)
            {
                Regex reg = new Regex(RewriteRegex, RegexOptions.IgnoreCase);
                if (reg.IsMatch(urltemp))
                {
                    urltemp = reg.Replace(urltemp, RewriteFormat);
                }
            }        
            int pagecount = zong % size == 0 ? (zong / size) : (zong / size + 1);
            int num = current / 10;

            System.Text.StringBuilder sball = new System.Text.StringBuilder("");
            int xian = current / 10 + 1;

            int before = current % 10 == 0 ? (current / 10) : (current / 10);
            sball.AppendFormat("<a href='" + string.Format(urltemp, current - 1 < 1 ? ("1") : ((current - 1).ToString())) + "'>上一页</a>&nbsp;");
            for (int i = ((before * 10 - 5) > 0 ? (before * 10 - 5) : (1)); i <= (before * 10 == 0 ? (1) : (before * 10-1)); i++)
            {
                if ((before * 10 - 5) < 0)
                    continue;
                if ((i+1) == current)
                    sball.AppendFormat("<a href='" + string.Format(urltemp, (i + 1).ToString()) + "' class=\"{1}\">{0}</a>&nbsp;", (i + 1).ToString(), CurrentCss);
                else
                    sball.AppendFormat("<a href='" + string.Format(urltemp, (i + 1).ToString()) + "'>{0}</a>&nbsp;", (i + 1).ToString());
                sball.Append("&nbsp;");
            }
            for (int i = ((xian - 1) * 10 > pagecount ? (pagecount) : ((xian - 1) * 10)); i < (xian * 10 < pagecount ? (xian * 10) : (pagecount)); i++)
            {

                if (i == 0)
                    sball.AppendFormat("<a href='" + string.Format(urltemp, (i + 1).ToString()) + "'>").Append((i + 1)).Append("</a>&nbsp;");
                else if ((i+1) == current)
                    sball.AppendFormat("<a href='" + string.Format(urltemp, (i + 1).ToString()) + "' class=\"{1}\">{0}</a>&nbsp;", (i + 1).ToString(), CurrentCss);

                else
                    sball.Append("&nbsp;<a href='" + string.Format(urltemp, (i + 1).ToString()) + "'>").Append((i + 1)).Append("</a>&nbsp;");

            }
            sball.Append("<a href='" + string.Format(urltemp, (current + 1 > pagecount ? (pagecount.ToString()) : ((current + 1).ToString()))) + "'>下一页</a>");
            //sball.Append("&nbsp;共").Append(zong.ToString()).Append("条&nbsp;当前第&nbsp;").Append((current).ToString()).Append("&nbsp;页").Append("&nbsp;共&nbsp;").Append(pagecount).Append("&nbsp;页");
            return sball.ToString();
          
        }

        protected override void RenderContents(HtmlTextWriter output)
        {
            //<td style=\"width: 30%\"><input type=\"text\" id=\"Pages1_TbPageGo\"  onKeyUp=\"this.value=this.value.replace(/[^\\d]+/,'')\" style=\"width: 33px\"/><input id=\"BtGo\" style=\"width: 34px\" type=\"button\" value=\"GO\" onClick=\"document.location.href=document.location.href.indexOf('page=')>=0?(document.location.href.replace(/page=([^&]*)/,'page='+document.getElementById('Pages1_TbPageGo').value)):(document.location.href.indexOf('?')>=0?(document.location.href+'&page='+document.getElementById('Pages1_TbPageGo').value):(document.location.href+'?page='+document.getElementById('Pages1_TbPageGo').value))\"/></td>
            string tempData = "<table border=\"0\" width=\"100%\" height=\"30px\" style=\"margin:0px\"><tr><td width=\"100%\">{0}</td></tr></table>";
            output.Write(string.Format(tempData, GetPage(CurrentPage,PageSize,NumCount)));
        }
    }
}

分享到:
评论

相关推荐

    自绘页码控件

    - 示例应用程序入口,展示了如何在主窗口中添加并使用自绘页码控件。 - 可能还包括测试数据和配置文件,用于模拟多页数据的情况。 通过对`Page_Demo`的分析和学习,开发者可以掌握自绘页码控件的设计原理和实现方法...

    MFC控件类页码控件

    "MFC控件类页码控件"的实现通常涉及自定义控件类,这里提到的"StaticPage"可能是用户自定义的页码控件类,它可能扩展了MFC的CStatic类,因为CStatic是MFC中用于创建静态文本或简单图形的基本控件,有时也会被用作...

    自定义GridView控件 代码

    2. **实现分页**:为了实现自动分页,我们需要在控件中添加对SQL查询的处理,以便根据用户选择的每页记录数动态生成分页SQL。可以创建一个方法来接收SQL语句,然后根据当前页数和每页大小对其进行修改。 3. **数据...

    VUE页码控件

    3. 使用组件:在Vue模板中添加页码控件的标签,传入必要的属性,如总页数、当前页等。 4. 绑定事件:利用Vue的`@click`或其他事件监听器来处理页码点击事件,更新数据源或触发相应的API请求。 5. 配合Vuex(可选):...

    C# WinForm分页控件

    在这个项目中,开发者创建了一个名为`PageControl`的自定义控件,包含在`PageControl.cs`源代码文件和`PageControl.resx`资源文件中。 `PageControl.cs`是核心代码文件,它包含了控件的定义、事件处理和逻辑。在这...

    javascript分页(页码生成)

    3. **页码生成**:在`upPage`函数中,还有一段代码用于生成页码链接,包括“首页”、“上一页”、“下一页”和“末页”等导航链接,以及显示当前页码和总页数的信息。 #### 四、扩展与优化 虽然给定的代码实现了...

    自定义分页控件

    3. **属性**:自定义分页控件可能需要一些属性来配置,如每页显示的记录数(PageSize)、总记录数(TotalRecords)、当前页数(CurrentPage)等。这些属性可以通过属性访问器(get/set)进行设置和获取。 4. **事件...

    jquery.page分页控件02.zip

    本篇文章将深入探讨jQuery.page分页控件,通过分析其核心代码和使用方式,帮助开发者更好地理解和应用这个强大的工具。 首先,我们来看一下标题中的"jquery.page分页控件02.zip",这表明这是一个关于jQuery.page...

    repeater控件分页 C#.Net实例代码

    在本实例中,C#代码将用于处理Repeater控件的分页逻辑,包括获取分页所需的数据,计算总页数,以及处理用户导航页码时的事件。 3. **.NET Framework**: .NET Framework是Microsoft开发的一个软件平台,包含.NET ...

    使用PageSource 对其他控件照样可以分页

    总的来说,"使用PageSource 对其他控件照样可以分页"是一种有效的方法,它允许开发者将分页机制应用于各种控件,增强了代码的灵活性和可扩展性。通过理解和运用这一技术,可以更好地处理大数据量的显示,提高用户...

    Winform自定义分页控件

    1. **引用控件**:将`PageControl`控件添加到你的项目中,这可能通过添加对包含控件代码的dll引用,或者直接复制源代码到你的项目中实现。 2. **设计界面**:在设计器中拖放`PageControl`到窗体上,并调整其大小和...

    WPF 仿百度分页控件

    百度的分页控件以其简洁明了的界面和高效的操作方式著称,其主要特点包括限制每页显示的页码数量,通常为10个,并允许用户直接输入页码进行跳转。 **1. 设计理念** 仿百度的分页控件设计时,我们需要关注以下几个...

    WPF自定义分页控件

    1. **创建控件类**:继承自`UserControl`或`Control`,并添加所需属性,如CurrentPage、PageSize、TotalPages等。 2. **XAML布局**:在XAML文件中定义控件的布局,包括按钮、文本框和其他元素,并为其设置相应的事件...

    Qt分页控件

    3. **编写逻辑代码**:在Python代码中,导入生成的`.py`文件,创建一个类继承自`QWidget`或`QMainWindow`,并在其中实例化`.ui`文件中的控件。设置`QStackedWidget`的初始索引,并连接按钮的`clicked`信号到处理函数...

    用JS写的代码分页控件,附加简单的CSS样式

    HTML部分主要用于创建页码按钮,而JavaScript部分则负责计算总页数、生成页码列表以及添加事件监听器。为了使分页控件更具响应性,你还可以考虑使用`addEventListener`方法来动态添加和移除事件监听器。 此外,这个...

    repeaterpage控件分页功能完全代码

    在代码-behind中,处理页面加载事件,根据当前页码和每页大小获取数据源,然后绑定到`Repeater`控件。 ```csharp protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { int pageIndex =...

    repeter控件的分页功能的实现

    在设计时,Repeater控件不会显示任何UI,但在运行时,它会根据数据源中的每一项生成相应的HTML代码。通过ItemTemplate, AlternatingItemTemplate和SeparatorTemplate属性,我们可以定义数据项、交替项和分隔符的...

    php 分页控件

    `page.php`是PHP分页控件的核心,它包含了处理分页逻辑的代码,如计算总页数、获取当前页数据、生成分页链接等。`说明.txt`很可能是对这个分页控件的使用指南,提供了详细的配置和调用方法。 `page.php`的工作流程...

    wpf 用户控件实现分页

    在XAML中,添加用户控件并设置它的`CurrentPage`和`TotalPages`属性。 ```xml &lt;local:MyPagingControl CurrentPage="{Binding Path=CurrentPage}" TotalPages="{Binding Path=TotalPages}" /&gt; ``` 5. **数据绑定**...

    分享一个asp.net pager分页控件

    7. `initNumber`函数生成页面数字列表,这部分代码可能未完全展示,但其通常会创建一个包含1到总页数的页码列表,同时处理边界情况(如首页和末页的特殊样式)。 为了在ASP.NET中集成这个自定义分页控件,我们需要...

Global site tag (gtag.js) - Google Analytics