前端时间开发的分页控件,满足不了现在的需求,因为涉及到 Url 重写,于是乎,又发一个,顺便散分,最近沉迷T-SQL,很久没有过来了 ,我是采用的 url 分页,用的 存储过程分页方式 ,这个 只是 用于 将  你的 显示翻页 好看一点的 来着~
先发个看看 
(这两天,生病了,所以来csdn .今天老板放我假~哈哈)
using System;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Text.RegularExpressions;
using System.Web.UI;/// <summary>
///PagerControl 的摘要说明
/// </summary>
namespace YSMV.Control
{
    public class UrlRewritePagerControl : System.Web.UI.UserControl
    {
        #region Parmeter
        private string rx;
        private Regex reg;
        private int _pageSize = 10, _pageCount, _pageIndex = 1, _totalCount = 0, _groupNum = 5;
        private string sendToUrl, queryPage = "page", _matchFirst = "$1", _matchLast = "$2", _link = "";
        private bool _smart = false;
        #endregion
        #region HTML
        private const string divstart = "<div class='digg'>";
        private const string divend = "</div>";
        private const string prepage = "<span class='disabled'>";
        private const string nextpage = "<span class='disabled'>";
        private const string currentpage = "<span class='current'>";
        private const string endspan = "</span>";
        private const string astart = "<a href='";
        private const string ahrefend = "' title='";
        private const string aaltend = "'>";
        private const string aover = "</a>";
        private const string prev = "&lt;";
        private const string next = "&gt;";
        #endregion
        #region Properties
        //记录总数
        public int TotalCount
        {
            set { _totalCount = value; }
        }
        //当前页
        public int PageCount
        {
            set { _pageCount = value; }
            get { return _pageCount; }
        }
        //一页的记录数
        public int PageSize
        {
            get { return _pageSize; }
            set { _pageSize = value; }
        }
        //匹配正则
        public string RX
        {
            get { return rx; }
            set { rx = value; }
        }
        //匹配的Url开始部分
        public string MatchLast
        {
            set { _matchLast = value; }
            get { return _matchLast; }
        }
        //匹配的Url结束部分
        public string MatchFirst
        {
            set { _matchFirst = value; }
            get { return _matchFirst; }
        }
        public int GroupNum
        {
            get { return _groupNum; }
            set { _groupNum = value; }
        }
        public string Link
        {
            get { return _link; }
            set { _link = value; }
        }
        public bool Smart
        {
            get { return _smart; }
            set { _smart = value; }
        }
        #endregion
        public UrlRewritePagerControl()
        {
            sendToUrl = Context.Request.RawUrl;
            if (Context.Request[queryPage] != null)
            {
                int.TryParse(Context.Request[queryPage].ToString(), out _pageIndex);
            }
        }

解决方案 »

  1.   


            protected override void Render(HtmlTextWriter writer)
            {
                //计算总页数
                _pageCount = (_totalCount - 1) / _pageSize + 1;
                if (_pageIndex > _pageCount || _pageIndex <= 0)
                    _pageIndex = 1;
                reg = new Regex(rx, RegexOptions.IgnoreCase | RegexOptions.Compiled);
                //开始div
                writer.Write(divstart);
                if (_smart)
                {
                    writer.Write(_pageIndex);
                    writer.Write("/");
                    writer.Write(_pageCount+"&nbsp;");
                }
                //输入 上一页按钮
                if (_pageIndex == 1)
                {
                    writer.Write(prepage);
                    writer.Write(prev);
                    writer.Write(endspan);
                }
                else
                {                writer.Write(astart);
                    writer.Write(GetUrl(reg, _pageIndex - 1));
                    writer.Write(ahrefend);
                    writer.Write("上一页");
                    writer.Write(aaltend);
                    writer.Write(prev);
                    writer.Write(aover);
                }
                if (!_smart)
                {
                    //计算当前的组
                    int currentgroup = (_pageIndex - 1) / _groupNum + 1;
                    //所有组
                    int groupcount = (_pageCount - 1) / _groupNum + 1;
                    //当前组开始的位置
                    int start = (currentgroup - 1) * _groupNum * _pageSize + 1;
                    //计算剩余组别的页数                int lesssize = (_totalCount - start) / _pageSize + 1;
                    //计算当前组显示的页数
                    int size = Math.Min(_groupNum, lesssize);
                    //当不是最后一组的时候
                    if (currentgroup < groupcount)
                    {
                        for (int i = 1; i <= size; i++)
                        {
                            //显示当前页
                            //当前页码
                            int cur = (currentgroup - 1) * _groupNum + i;
                            if (_pageIndex == cur)
                            {
                                writer.Write(currentpage);
                                writer.Write(cur);
                                writer.Write(endspan);
                            }
                            //其他页
                            else
                            {
                                writer.Write(astart);
                                writer.Write(GetUrl(reg, cur));
                                writer.Write(ahrefend);
                                writer.Write("第" + cur + "页");
                                writer.Write(aaltend);
                                writer.Write(cur);
                                writer.Write(aover);
                            }
                        }
                        writer.Write("...");
                        writer.Write(astart);
                        writer.Write(GetUrl(reg, _pageCount));
                        writer.Write(ahrefend);
                        writer.Write("第" + _pageCount + "页");
                        writer.Write(aaltend);
                        writer.Write(_pageCount);
                        writer.Write(aover);
                    }
                    else
                    {
                        for (int i = 1; i <= size; i++)
                        {
                            //显示当前页
                            //当前页码
                            int cur = (currentgroup - 1) * _groupNum + i;
                            if (_pageIndex == cur)
                            {
                                writer.Write(currentpage);
                                writer.Write(cur);
                                writer.Write(endspan);
                            }
                            //其他页
                            else
                            {
                                writer.Write(astart);
                                writer.Write(GetUrl(reg, cur));
                                writer.Write(ahrefend);
                                writer.Write("第" + cur + "页");
                                writer.Write(aaltend);
                                writer.Write(cur);
                                writer.Write(aover);
                            }
                        }
                    }
                }
                //输入下一页按钮
                if (_pageIndex == _pageCount)
                {
                    writer.Write(nextpage);
                    writer.Write(next);
                    writer.Write(endspan);
                }
                else
                {
                    writer.Write(astart);
                    writer.Write(GetUrl(reg, _pageIndex + 1));
                    writer.Write(ahrefend);
                    writer.Write("下一页");
                    writer.Write(aaltend);
                    writer.Write("下一页" + next);
                    writer.Write(aover);
                }
                //结束div
                writer.Write(divend);
            }
            private string GetUrl(Regex reg, int pageindex)
            {            string a = reg.Replace(sendToUrl, _matchFirst);
                string b = reg.Replace(sendToUrl, _matchLast);
                if (b == null)
                    b = "";
                return a + pageindex.ToString() + b + _link;
            }
        }
    }
      

  2.   

    怎么 使用?
    对了忘记 说了 这个是 利用 匹配Url 讲起截取 然后 再保存  批凑当前页码
    使用的:
    <%@ Register Namespace="YSMV.Control" TagPrefix="Ysmv" %> 页面注册
                <Ysmv:UrlRewritePagerControl runat="server" GroupNum="5" ID="pager" MatchFirst="$1"
                    MatchLast="$2" Smart="false" />放下            
    <Ysmv:UrlRewritePagerControl runat="server" GroupNum="5" ID="pager" MatchFirst="$1"
                    MatchLast="$2" Smart="false" />
    然后
    在 *.aspx.cs

                pager.RX = @"(" + Request.ApplicationPath + @"/s-.*--).*(-.*----.*-.*-.*-.*-.*-.*-.*-0\.html)";
                pager.PageSize = 一页多少记录;
     pager.TotalCount=设置 总记录数...;
      

  3.   

    还有 他的CSS/*分页控件样式*/DIV.digg { margin:3px; padding:3px; text-align:right; float:right}
    DIV.digg A {
    BORDER-RIGHT: #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #000099; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none
    }
    DIV.digg A:hover {
    BORDER-RIGHT: #000099 1px solid; BORDER-TOP: #000099 1px solid; BORDER-LEFT: #000099 1px solid; COLOR: #000; BORDER-BOTTOM: #000099 1px solid
    }
    DIV.digg A:active {
    BORDER-RIGHT: #000099 1px solid; BORDER-TOP: #000099 1px solid; BORDER-LEFT: #000099 1px solid; COLOR: #000; BORDER-BOTTOM: #000099 1px solid
    }
    DIV.digg SPAN.current {
    BORDER-RIGHT: #000099 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #000099 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #000099 1px solid; COLOR: #fff; PADDING-TOP: 2px; BORDER-BOTTOM: #000099 1px solid; BACKGROUND-COLOR: #000099
    }
    DIV.digg SPAN.disabled {
    BORDER-RIGHT: #eee 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #eee 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #eee 1px solid; COLOR: #ddd; PADDING-TOP: 2px; BORDER-BOTTOM: #eee 1px solid
    }
      

  4.   

    不是用控件分页,是根据 页面的  重写规则 然后显示  重写后的不同页的 url
      

  5.   

    把我写的拿出来跟你的比一比:asp.net分页控件
      

  6.   

    单纯的接分,个人认为分页用js就够了。但楼主的分享精神不得不顶呀 习惯javascript加点ajax来实现分页。哈哈
      
    小毛,大大的给分。俺是混子
      

  7.   

    身体是革命的本钱,再奋战的同事们 ,保护好身体,
    今天没事 还 继续上次的文章写了 
    http://www.cnblogs.com/bhtfg538/archive/2008/11/25/1341016.html
    http://www.cnblogs.com/bhtfg538/archive/2008/12/16/1355957.html
    大家看看
      

  8.   

    吴旗娃 是我师傅的师傅
    汗...
    原来看过他的 
    呵呵
    通用类型的  我难得正 控件的CSS 
    我是已经有了分页
    然后显示 重写后的页码而已 
    哇哈
      

  9.   

    上CSDN的第一件事就是看闵老师是否在散分!呵呵!
    顶下啊!
    嘿嘿!