冷枫@CSDN

CSharp程序员大本营:积累平凡就是积累卓越!有了翅膀,你就有了天空!钝到极点的刀才最具杀伤力——因为它是锤子!

用户操作
[即时聊天] [发私信] [加为好友]
╄ 冷枫ID:JavaProgramers
484069次访问,排名98好友111人,关注者144
毕业于南阳理工学院计算机系软件工程专业,一直从事于软件开发工作,编程经验5年,一线程序员出身,开发实战经验丰富,精通Asp,Asp.NET, ERP(C#.NET),基于WEB(Asp.Net)的MIS等世道上的一般编程,精通SQL Server存储过程开发,曾为一家中型商务企业软件开发工程师,软件培训师。
JavaProgramers的文章
原创 287 篇
翻译 0 篇
转载 24 篇
评论 441 篇
╄ 冷枫的公告
╄ 冷枫 Asp.NET微软MVP
本Blog技术支持QQ群
[NET技术联盟]:1908832
[冷枫开发小组]:6307410
CSharp开放源码促进会
CSharp程序员大本营
最近评论
反对垄断:现在都在卖服务,软件都是白送的,微软降到100多就想笼络人心,做梦,微软迟早要完蛋
wyw_2002:“中国用户的计算机中60%都运行微软的操作系统“

请问这个60%是你统计的吗?
那40%是什么系统?

捡瓶子:废瓶子1角钱一个,一天捡100个,10元,跑去吃饭8元,买个XP,也要捡2年啊!
zenggang2008:反击盗版,在中国还有很长的路要走啊
大家都已经习惯"免费"了
路过:盗版不利于中国的软件业的发展,最终用户好像在盗版软件中得到了很多的好处,但是把中国的软件产业搞垮了。最终用户最后还是受害者。
文章分类
收藏
    相册
    IT英雄传奇
    大学留念集
    公司一角
    旅游系列二
    旅游系列三
    旅游系列一
    [╄ 冷枫]简介
    站长简介(RSS)
    经典网站收集
    .NET分页存储过程
    AJAX中国
    DOTNET控件网
    DotNet男孩社区
    Java共舞
    Tutorails[.NET]
    中国盟动力
    冷枫技术论坛
    开发者在线
    技术无极限(RSS)
    深圳赶集网
    源码网
    软件项目网
    网上邻居
    『 天道酬勤 』(RSS)
    『 孟子E章 』(RSS)
    『 孟子E章 』
    『 邹建专栏 』(RSS)
    『webdiyer 』
    微软官方
    ASP.NET 入门教程
    webcast视频教程
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 .Net分页控件发布收藏

    新一篇: DataGrid 的 全选/取消全选 控制(CheckBox) | 旧一篇: 存储过程

    由于.net自带的分页功能极其死板,自定义性不强不能满足需求
    俺花了一个多星期的时间 写成的一个.net分页控件

    特性:
    1、支持datagrid,datalist等分种数据显示控件,理论上只要有datasource的控件都可以
    2、支持url方式分页,url分页的每一页都可以被搜索引擎搜到,并且支持url重写
    3、控件样式可自定义
    4、封装完全,使用过程序只需写一行代码

      1 /******************************************************************
      2 ** 文件名:Pager.cs
      3 ** 创建人:杨响武
      4 ** 日 期:2005年7月27日
      5 ** 修改人:
      6 ** 日 期:
      7 ** 描 述:
      8 **
      9 **----------------------------------------------------------------
     10 ******************************************************************/
     11
     12 using System;
     13 using System.Web.UI.WebControls;
     14 using System.Web.UI.HtmlControls;
     15 using System.Web;
     16 using System.Web.UI;
     17 using System.Text.RegularExpressions;
     18
     19 namespace MyCompany.Controls
     20 {
     21     /// <summary>
     22     /// 分页控件
     23     /// </summary>
     24     public class Pager : Label, INamingContainer
     25     {
     26         #region 成员变量和构造函数
     27         HttpContext context = HttpContext.Current;
     28         Label countLabel;
     29         HyperLink previousButton;
     30         HyperLink nextButton;
     31         HyperLink firstButton;
     32         HyperLink lastButton;
     33         HyperLink[] pagingLinkButtons;
     34        
     35         public override ControlCollection Controls
     36         {
     37             get
     38             {
     39                 EnsureChildControls();
     40                 return base.Controls;
     41             }
     42         }
     43
     44         protected override void CreateChildControls()
     45         {
     46             Controls.Clear();
     47
     48             AddCountLabel();
     49
     50             AddPageButtons();
     51
     52             AddPreviousNextHyperLinks();
     53
     54             AddFirstLastHyperLinks();
     55         }
     56         #endregion
     57
     58         #region 呈现方法
     59         protected override void Render(HtmlTextWriter writer)
     60         {
     61 //            修改总页数小于等于1的时候不呈现任何控件
     62 //            int totalPages = CalculateTotalPages();
     63 //
     64 //            if (totalPages <= 1)
     65 //                return;
     66
     67             AddAttributesToRender(writer);
     68
     69             writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);
     70
     71             RenderCountLabel(writer);
     72
     73             RenderFirst(writer);
     74
     75             RenderPrevious(writer);
     76
     77             RenderPagingButtons(writer);
     78            
     79             RenderNext(writer);
     80
     81             RenderLast(writer);
     82         }
     83
     84         void RenderCountLabel(HtmlTextWriter writer)
     85         {
     86             countLabel.RenderControl(writer);
     87
     88             LiteralControl l = new LiteralControl("&nbsp;");
     89             l.RenderControl(writer);
     90         }
     91
     92         void RenderFirst (HtmlTextWriter writer)
     93         {
     94             firstButton.RenderControl(writer);
     95
     96             LiteralControl l = new LiteralControl("&nbsp;");
     97             l.RenderControl(writer);
     98         }
     99
    100         void RenderLast (HtmlTextWriter writer)
    101         {
    102             lastButton.RenderControl(writer);
    103
    104             LiteralControl l = new LiteralControl("&nbsp;");
    105             l.RenderControl(writer);
    106         }
    107
    108         void RenderPrevious (HtmlTextWriter writer)
    109         {
    110             previousButton.RenderControl(writer);
    111
    112             LiteralControl l = new LiteralControl("&nbsp;");
    113             l.RenderControl(writer);
    114         }
    115
    116         void RenderNext(HtmlTextWriter writer)
    117         {
    118             nextButton.RenderControl(writer);
    119
    120             LiteralControl l = new LiteralControl("&nbsp;");
    121             l.RenderControl(writer);
    122         }
    123
    124         private void RenderButtonRange(int start, int end, HtmlTextWriter writer)
    125         {
    126             for (int i = start; i < end; i++)
    127             {
    128                 if (PageIndex == i)
    129                 {
    130                     Literal l = new Literal();
    131                     l.Text = "<font color =red>" + (i + 1).ToString() + "</font>";
    132
    133                     l.RenderControl(writer);
    134                 }
    135                 else
    136                 {
    137                     pagingLinkButtons[i].RenderControl(writer);
    138                 }
    139                 if (i < (end - 1))
    140                     writer.Write("&nbsp;");
    141             }
    142
    143             LiteralControl l1 = new LiteralControl("&nbsp;");
    144             l1.RenderControl(writer);
    145         }
    146
    147         private void RenderPagingButtons(HtmlTextWriter writer)
    148         {
    149             int totalPages;
    150
    151             totalPages = CalculateTotalPages();
    152
    153             if (totalPages <= 10)
    154             {
    155                 RenderButtonRange(0, totalPages, writer);
    156             }
    157             else
    158             {
    159                 int lowerBound = (PageIndex - 4);
    160                 int upperBount = (PageIndex + 6);
    161
    162                 if (lowerBound <= 0)
    163                     lowerBound = 0;
    164
    165                 if (PageIndex <= 4)
    166                     RenderButtonRange(0, 10, writer);
    167
    168                 else if (PageIndex < (totalPages - 5))
    169                     RenderButtonRange(lowerBound, (PageIndex + 6), writer);
    170
    171                 else if (PageIndex >= (totalPages - 5))
    172                     RenderButtonRange((totalPages - 10), totalPages, writer);
    173             }
    174         }
    175
    176         #endregion
    177
    178         #region 控件树方法
    179         /// <summary>
    180         /// 信息标签
    181         /// </summary>
    182         void AddCountLabel()
    183         {
    184             countLabel = new Label();
    185             countLabel.ID = "countLabel";
    186             countLabel.Text = string.Format(text, CalculateTotalPages().ToString("n0"));
    187
    188             Controls.Add(countLabel);
    189         }
    190
    191         private void AddPageButtons()
    192         {
    193             pagingLinkButtons = new HyperLink[CalculateTotalPages()];
    194
    195             for (int i = 0; i < pagingLinkButtons.Length; i++)
    196             {
    197                 pagingLinkButtons[i] = new HyperLink();
    198                 pagingLinkButtons[i].EnableViewState = false;
    199                 pagingLinkButtons[i].Text = (i + 1).ToString();
    200                 pagingLinkButtons[i].ID = i.ToString();
    201                 pagingLinkButtons[i].CssClass = linkCss;
    202                 pagingLinkButtons[i].NavigateUrl = GetHrefString(i);
    203
    204                 Controls.Add(pagingLinkButtons[i]);
    205             }
    206         }
    207
    208         /// <summary>
    209         /// 首页末页
    210         /// </summary>
    211         void AddFirstLastHyperLinks()
    212         {
    213             firstButton = new HyperLink();
    214             firstButton.ID = "First";
    215             firstButton.Text = "首页";
    216             if(PageIndex != 0 && CalculateTotalPages() > 0)
    217             {
    218                 firstButton.NavigateUrl = GetHrefString(0);
    219             }
    220             else
    221             {
    222                 firstButton.Enabled = false;
    223             }
    224            
    225             Controls.Add(firstButton);
    226
    227             lastButton = new HyperLink();
    228             lastButton.ID = "Last";
    229             lastButton.Text = "末页";
    230             if(PageIndex != CalculateTotalPages() - 1)
    231             {
    232                 lastButton.NavigateUrl = GetHrefString(CalculateTotalPages() - 1);
    233             }
    234             else
    235             {
    236                 lastButton.Enabled = false;
    237             }
    238             Controls.Add(lastButton);
    239         }
    240
    241         /// <summary>
    242         /// 上一页下一页
    243         /// </summary>
    244         void AddPreviousNextHyperLinks()
    245         {
    246             previousButton = new HyperLink();
    247             previousButton.ID = "Prev";
    248             previousButton.Text = "上一页";
    249             if (HasPrevious)
    250             {
    251                 previousButton.NavigateUrl = GetHrefString(PageIndex - 1);
    252             }
    253             else
    254             {
    255                 previousButton.Enabled = false;
    256             }
    257             Controls.Add(previousButton);
    258
    259             nextButton = new HyperLink();
    260             nextButton.ID = "Next";
    261             nextButton.Text = "下一页";
    262             if(HasNext)
    263             {
    264                 nextButton.NavigateUrl = GetHrefString(PageIndex + 1);
    265             }
    266             else
    267             {
    268                 nextButton.Enabled = false;
    269             }
    270             Controls.Add(nextButton);
    271         }
    272         #endregion
    273
    274         #region 私有属性
    275         private bool HasPrevious
    276         {
    277             get
    278             {
    279                 if (PageIndex > 0)
    280                     return true;
    281
    282                 return false;
    283             }
    284         }
    285
    286         private bool HasNext
    287         {
    288             get
    289             {
    290                 if (PageIndex + 1 < CalculateTotalPages() )
    291                     return true;
    292
    293                 return false;
    294             }
    295         }
    296         #endregion
    297
    298         #region 帮助方法和公共属性
    299        
    300         /// <summary>
    301         /// 获取分页导航按钮的超链接字符串
    302         /// </summary>
    303         /// <param name="pageIndex">该分页按钮相对应的页索引</param>
    304         /// <returns>分页导航按钮的超链接字符串</returns>
    305         private string GetHrefString(int pageIndex)
    306         {
    307             string url = Page.Request.RawUrl;
    308
    309             if (Regex.IsMatch(url, @"(\d+).shtml", RegexOptions.IgnoreCase))
    310             {
    311                 url = Regex.Replace(url, @"(\d+).shtml", pageIndex + ".shtml");
    312             }
    313
    314             if (Regex.IsMatch(url, @"PageIndex=(\d+)", RegexOptions.IgnoreCase))
    315             {
    316                 url = Regex.Replace(url, @"PageIndex=(\d+)", "PageIndex=" + pageIndex.ToString());
    317             }
    318
    319             return Page.Server.UrlPathEncode(url);
    320         }
    321
    322         public int CalculateTotalPages()
    323         {
    324             int totalPagesAvailable;
    325
    326             if (TotalRecords == 0)
    327                 return 0;
    328
    329             totalPagesAvailable = TotalRecords / PageSize;
    330
    331             if ((TotalRecords % PageSize) > 0)
    332                 totalPagesAvailable++;
    333
    334             return totalPagesAvailable;
    335         }
    336
    337         /// <summary>
    338         /// 当前页
    339         /// </summary>
    340         public int PageIndex
    341         {
    342             get
    343             {
    344                 int _pageIndex = 0;
    345
    346                 if ((!Page.IsPostBack) && (context.PageIndex > 0))
    347                     _pageIndex = context.PageIndex;
    348                 else
    349                     _pageIndex = Convert.ToInt32(ViewState["PageIndex"]);
    350
    351                 if (_pageIndex < 0)
    352                     return 0;
    353                 else
    354                 {
    355                     if (_pageIndex > CalculateTotalPages()-1)
    356                         return CalculateTotalPages()-1;
    357                     else
    358                         return _pageIndex;
    359                 }
    360             }
    361             set
    362             {
    363                 ViewState["PageIndex"] = value;
    364             }
    365         }
    366
    367         /// <summary>
    368         /// 每页记录数
    369         /// </summary>
    370         public int PageSize
    371         {
    372             get
    373             {
    374                 int pageSize = Convert.ToInt32(ViewState["PageSize"]);
    375
    376                 if (pageSize == 0)
    377                 {
    378                     return 10;
    379                 }
    380
    381                 return pageSize;
    382             }
    383             set
    384             {
    385                 ViewState["PageSize"] = value;
    386             }
    387
    388         }
    389
    390         /// <summary>
    391         /// 总记录数
    392         /// </summary>
    393         public int TotalRecords
    394         {
    395             get
    396             {
    397                 return Convert.ToInt32(ViewState["TotalRecords"]);
    398             }
    399             set
    400             {
    401                 ViewState["TotalRecords"] = value;
    402             }
    403         }
    404
    405         private string text = "共{0}页";
    406
    407         private string linkCss = "";
    408         /// <summary>
    409         /// 链接样式
    410         /// </summary>
    411         public string LinkCss
    412         {
    413             get { return linkCss; }
    414             set { linkCss = value;}
    415         }
    416
    417         private string textCss = "";
    418         /// <summary>
    419         /// 文字样式
    420         /// </summary>
    421         public string TextCss
    422         {
    423             get { return textCss; }
    424             set { textCss = value;}
    425         }
    426
    427         public string TextFormat
    428         {
    429             get
    430             {
    431                 return text;
    432             }
    433             set
    434             {
    435                 text = value;
    436             }
    437         }
    438
    439         #endregion
    440     }
    441 }
    442
    在页面上只需要向下面这样写:
    1 <%@ Control Language="c#" %>
    2 <%@ Register TagPrefix="Anchor" Namespace="MyCompany.Controls" Assembly="MyCompany.Controls" %>
    3 <ANCHOR:PAGER id="Pager1" runat="server"></ANCHOR:PAGER>
    4   

     

    发表于 @ 2006年08月09日 15:47:00|评论(loading...)|编辑

    新一篇: DataGrid 的 全选/取消全选 控制(CheckBox) | 旧一篇: 存储过程

    评论

    #gyf19 发表于2006-08-16 21:41:00  IP: 61.51.56.*
    写一些Demo吧!
    #憨憨 发表于2006-09-11 23:05:00  IP: 222.71.142.*
    代码太长
    用法不是很清楚
    说明写得详细一些
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © ╄ 冷枫