.Net分页控件发布

2016-02-19 18:56 12 1 收藏

下面请跟着图老师小编一起来了解下.Net分页控件发布,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - Web开发 】

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  特性:
  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(" ");
   89             l.RenderControl(writer);
   90         }
   91
   92         void RenderFirst (HtmlTextWriter writer)
   93         {
   94             firstButton.RenderControl(writer);
   95
   96             LiteralControl l = new LiteralControl(" ");
   97             l.RenderControl(writer);
   98         }
   99
  100         void RenderLast (HtmlTextWriter writer)
  101         {
  102             lastButton.RenderControl(writer);
  103
  104             LiteralControl l = new LiteralControl(" ");
  105             l.RenderControl(writer);
  106         }
  107
  108         void RenderPrevious (HtmlTextWriter writer)
  109         {
  110             previousButton.RenderControl(writer);
  111
  112             LiteralControl l = new LiteralControl(" ");
  113             l.RenderControl(writer);
  114         }
  115
  116         void RenderNext(HtmlTextWriter writer)
  117         {
  118             nextButton.RenderControl(writer);
  119
  120             LiteralControl l = new LiteralControl(" ");
  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(" ");
  141             }
  142
  143             LiteralControl l1 = new LiteralControl(" ");
  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   

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

来源:http://www.tulaoshi.com/n/20160219/1619568.html

延伸阅读
标签: Web开发
利用ajax组件怎样能让它跟server控件交互呢,例如输出一个列表,就只有用js一条一条html的输出吗?当然不是,现在可以与datagrid交互。 注:ajax的.net组件可以到此网下载,本文用的是for .net 1.1版本的。http://ajax.schwarz-interactive.de/ 1. 在引用中添加引用Ajax.dll。(这个很废话) 2.在web.config中建立HttpHandler(这个当然是在...
标签: Web开发
以前写asp的程序的时候,知道只有type设置为submit的按钮,才能触发表单提交数据给服务器端。 如:Asp.Net中的Button就是等于input type="submit". 但是现在Asp.Net的好多控件都可以任意的和服务器端交互,如:LinkButton. 这是怎么实现的呢? 难道是一种全新的方式吗? 其实,这只是微软的一种变通的方式。 我们先来...
标签: vb
前言: 还记得在asp3.0里,我们为了上载文件可真是煞费苦心,写了一大堆的代码,可执行起来还是那么慢。但在asp.net里这个问题可以轻松搞定,这篇文章我们就探讨如何建立一个用户自定义的文件上载控件,并在我们的.ASPX程序中使用它。 正文 第一步:开发自定义文件上载控件 打开VS.NET,建立一个工程:WebApp,我们使用WebApp项目来做我们的...
标签: ASP
      开发基于Asp.Net的系统,最初使用R.a.d Treeview 2.5,经常会出现控件无法加载的情况。原以为是控件本身的问题,可后来将R.a.d Treeview升级到3.0版,还是无法解决。去Terelik官方网站看了F.A.Q,也没有提到这个问题。     后来发现,当出现控件无法加载的情况之后,只要Restart系统,或者等一会儿...
标签: Web开发
    Asp.net提供了三个功能强大的列表控件:DataGrid、DataList和Repeater控件,但其中只有DataGrid控件提供分页功能。相对DataGrid,DataList和Repeater控件具有更高的样式自定义性,所以很多时候我们喜欢使用DataList或Repeater控件来显示数据。  实现DataList或Repeater控件的分页显示有几种方法: ...

经验教程

507

收藏

30
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部