一个简单的分页控件,内置4种显示风格,主要是将AspNetForums的分页跟一个朋友(小熊)的合一块了,ANF的单调了点,小熊的吧,用起来有点麻烦,我人懒,就整一块了.:)
内置四种风格,通过设置StyleName(BasePager,CoolPager,DiscuzPager,SmallPager)就行,不过要注意大小写,CSS是从Assembly里面取的.
下面是效果,

如果想定制一些更炫的效果,就将StyleName设置成其它的任意名字.自己写CSS:
生成的HTML代码如下:

<script type="text/javascript">
//<![CDATA[

function xiaokui_pager_go(){
                 var n=event.srcElement;
                 if(event.keyCode==13)
                 {
                  var strUrl=location.href.toLowerCase();
                  strUrl=strUrl.replace(/(\&)?pageindex=\d+/gi,'');
                  if(location.search=='')
                            strUrl=strUrl+'?pageindex='+n.value;
                        else
                            strUrl=strUrl+'&pageindex='+n.value;
                        strUrl=strUrl.replace('?&','?');
                  location.href=strUrl;
                        return false;
               }
                }//]]>
</script>
<div id="Pager1" class="SmallPager Left">
<span class="SmallPager_pre">
<a id="Pager1" class="" id="Prev" href="http://localhost:2625/WebSite/Default.aspx?PageIndex=1">&lt;</a>
</span>
<span class="SmallPager_curr">1</span>
<span class="SmallPager_number"><a id="2" href="http://localhost:2625/WebSite/Default.aspx?PageIndex=2">2</a></span>
<span class="SmallPager_number"><a id="3" href="http://localhost:2625/WebSite/Default.aspx?PageIndex=3">3</a></span>
<span class="SmallPager_number"><a id="4" href="http://localhost:2625/WebSite/Default.aspx?PageIndex=4">4</a></span>
<span class="SmallPager_number"><a id="5" href="http://localhost:2625/WebSite/Default.aspx?PageIndex=5">5</a></span>
<span class="SmallPager_next"><a id="Next" href="http://localhost:2625/WebSite/Default.aspx?PageIndex=2">&gt;</a></span>
    GO:<input name="txtCustom" type="text" id="txtCustom" οnkeydοwn="return xiaokui_pager_go();" οnkeyup="this.value=this.value.replace(/[^0-9]/gi,'');" />
</div>

都在Span里面包着.想怎么改,就怎么改.

代码如下:

Code
  1using System;
  2using System.Collections.Generic;
  3using System.ComponentModel;
  4using System.Text;
  5using System.Web;
  6using System.Web.UI;
  7using System.Web.UI.WebControls;
  8using System.IO;
  9using System.Reflection;
 10
 11namespace Bqrm.Web.UI.WebControls
 12{
 13    对齐方式 enum#region 对齐方式 enum
 14    /**//// <summary>
 15    /// 对齐方式
 16    /// </summary>
 17    public enum Align
 18    {
 19        /**//// <summary>
 20        /// 左对齐
 21        /// </summary>
 22        Left = 0,
 23        /**//// <summary>
 24        /// 居中
 25        /// </summary>
 26        Center,
 27        /**//// <summary>
 28        /// 右对齐
 29        /// </summary>
 30        Right
 31    }
 32    #endregion
 33    /**//// <summary>
 34    /// 分页显示类
 35    /// </summary>
 36    [ToolboxData("<{0}:Pager runat=server></{0}:Pager>")]
 37    public class Pager:WebControl
 38    {
 39
 40        私有成员#region 私有成员
 41        private int _PageIndex;
 42        private string _StyleName;
 43        private Align _Align;
 44        private StringBuilder sbData = new StringBuilder();
 45        HyperLink previousLink;
 46        HyperLink nextLink;
 47        HyperLink firstLink;
 48        HyperLink lastLink;
 49        HyperLink[] pagingHyperLinks;
 50        TextBox txtCustom;
 51        private string preString = "<span class=\"{0}_{1}\">";
 52        private string lastString = "</span>";
 53        private string currentPageString = "<span class=\"{0}_curr\">{1}</span>";
 54        private bool showTextBox = true;
 55        #endregion
 56
 57        构造函数#region 构造函数
 58        /**//// <summary>
 59        /// 构造函数
 60        /// </summary>
 61        public Pager()
 62        {
 63            this._StyleName = "BasePager";
 64            this._Align = Align.Left;
 65        }
 66        #endregion
 67
 68                bool showCurrentPage = true;
 69        /**//// <summary>
 70        /// 显示当前页统计信息.如:当前页 1/10 共有1000条记录
 71        /// </summary>
 72        public bool ShowCurrentPage
 73        {
 74            get { return showCurrentPage; }
 75            set { showCurrentPage = value; }
 76        }
 77
 78        string firstPageText = "&lt;&lt;";
 79        /**//// <summary>
 80        /// 首页链接显示的字符
 81        /// </summary>
 82        public string FirstPageText
 83        {
 84            get { return firstPageText; }
 85            set { firstPageText = value; }
 86        }
 87
 88        string lastPageText = "&gt;&gt;";
 89        /**//// <summary>
 90        /// 尾页链接显示的字符
 91        /// </summary>
 92        public string LastPageText
 93        {
 94            get { return lastPageText; }
 95            set { lastPageText = value; }
 96        }
 97
 98        string previousPageText = "&lt;";
 99        /**//// <summary>
100        /// 上一页链接显示的字符
101        /// </summary>
102        public string PreviousPageText
103        {
104            get { return previousPageText; }
105            set { previousPageText = value; }
106        }
107
108        string nextPageText = "&gt;";
109        /**//// <summary>
110        /// 下一页链接显示的字符.默认">"
111        /// </summary>
112        public string NextPageText
113        {
114            get { return nextPageText; }
115            set { nextPageText = value; }
116        }
117
118        /**//// <summary>
119        /// 当前页码
120        /// </summary>
121        public virtual int PageIndex
122        {
123            get
124            {
125                HttpContext context = HttpContext.Current;
126
127                if (Page.IsPostBack && ViewState["PageIndex"] != null)
128                {
129                    _PageIndex = (int)ViewState["PageIndex"];
130                }
131                else
132                {
133                    int.TryParse(Page.Request.QueryString["pageindex"], out this._PageIndex);
134                    if (this._PageIndex == 0)
135                        this._PageIndex = 1;
136                }
137
138                if (_PageIndex < 0)
139                    return 0;
140                else
141                    return _PageIndex;
142            }
143            set
144            {
145                ViewState["PageIndex"] = value;
146                _PageIndex = value;
147            }
148        }
149
150        /**//// <summary>
151        /// 一页显示的数据条数
152        /// </summary>
153        public virtual int PageSize
154        {
155            get
156            {
157                int pageSize = Convert.ToInt32(ViewState["PageSize"]);
158                if (pageSize == 0) return 10;
159                return pageSize;
160            }
161            set
162            {
163                ViewState["PageSize"] = value;
164            }
165        }
166
167       /**//// <summary>
168       /// 总记录数
169       /// </summary>
170        public int TotalRecord
171        {
172            get
173            {
174                return Convert.ToInt32(ViewState["TotalRecords"]);
175            }
176            set
177            {
178                ViewState["TotalRecords"] = value;
179            }
180        }
181        /**//// <summary>
182        /// 生成指定页码的链接地址
183        /// </summary>
184        /// <param name="pageIndex"></param>
185        /// <returns></returns>
186        protected virtual string CreatePagerURL(string pageIndex)
187        {
188            HttpContext context = HttpContext.Current;
189            if (context.Request.Url.AbsoluteUri.IndexOf("?") == -1)
190            {
191                return context.Request.Url.AbsoluteUri.ToString() + "?PageIndex=" + pageIndex;
192            }
193            else
194            {
195                if (context.Request.Url.AbsoluteUri.ToLower().IndexOf("pageindex=") == -1)
196                    return context.Request.Url.AbsoluteUri.ToString() + "&PageIndex=" + pageIndex;
197                else
198                {
199                    return System.Text.RegularExpressions.Regex.Replace(context.Request.Url.AbsoluteUri.ToLower().ToString(), @"pageindex=(\d+\.?\d*|\.\d+)", "PageIndex=" + pageIndex);
200                }
201            }
202        }
203
204        /**//// <summary>
205        /// 总页数
206        /// </summary>
207        protected int TotalPage
208        {
209            get { return this.CalculateTotalPages(); }
210        }
211        /**//// <summary>
212        /// 样式
213        /// </summary>
214        public string StyleName
215        {
216            set { _StyleName = value; }
217            get { return _StyleName; }
218        }
219        /**//// <summary>
220        /// 对齐方式
221        /// </summary>
222        public Align HAlign
223        {
224            set { _Align = value; }
225        }
226        /**//// <summary>
227        /// 显示页码输入框
228        /// </summary>
229        public bool ShowTextBox
230        {
231            get { return showTextBox; }
232            set { showTextBox = value; }
233        }
234
235        protected override void CreateChildControls()
236        {
237            Controls.Clear();
238            AddPageLinks();
239            AddPreviousNextLinks();
240            AddFirstLastLinks();
241            AddCustomPager();
242            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "customPager", GetScripts(), true);
243        }
244        String GetScripts()
245        {
246            StringBuilder sb = new StringBuilder();
247            sb.Append(@"
248                function xiaokui_pager_go(){
249                    var n=event.srcElement;
250                    if(event.keyCode==13)
251                    {
252                        var strUrl=location.href.toLowerCase();
253                        strUrl=strUrl.replace(/(\&)?pageindex=\d+/gi,'');
254                        if(location.search=='')
255                            strUrl=strUrl+'?pageindex='+n.value;
256                        else
257                            strUrl=strUrl+'&pageindex='+n.value;
258                        strUrl=strUrl.replace('?&','?');
259                        location.href=strUrl;
260                        return false;
261                     }
262                }");
263            return sb.ToString();
264        }
265
266        void AddCustomPager()
267        {
268            txtCustom = new TextBox();
269            txtCustom.ID = "txtCustom";
270            txtCustom.EnableViewState = false;
271            txtCustom.Attributes.Add("onkeydown", "return xiaokui_pager_go();");
272            txtCustom.Attributes.Add("onkeyup", "this.value=this.value.replace(/[^0-9]/gi,'');");
273            Controls.Add(txtCustom);
274        }
275        protected override void OnInit(EventArgs e)
276        {
277            base.OnInit(e);
278            AddStyle();
279        }
280        protected override void  OnLoad(EventArgs e)
281        {
282              base.OnInit(e);
283             if (this.Context.Request["pagerstylename"] != null)
284             {
285                 Assembly executingAssembly = Assembly.GetExecutingAssembly();
286                 Stream stream = executingAssembly.GetManifestResourceStream("Bqrm." + StyleName + ".css");
287                 stream.Position = 0L;
288                 string script = new StreamReader(stream).ReadToEnd();
289                 Page.Response.Write(script);
290                 Page.Response.End();
291             }
292        }
293
294        protected void AddStyle()
295        {
296            string str2 = this.Context.Request.Url.ToString();
297            str2 = str2 + ((str2.IndexOf("?") >= 0) ? "&" : "?");
298            string s = StyleName.ToLower();
299            if (s == "basepager" || s == "coolpager" || s == "discuzpager" || s == "smallpager")
300            {
301                try
302                {
303                    Page.Header.Controls.Add(new LiteralControl("<link rel=\"stylesheet\" href=\"" + str2 + "PagerStyleName=" + StyleName + "\" type=\"text/css\" />"));
304                }
305                catch
306                {
307                    Page.Response.Write("<link rel=\"stylesheet\" href=\"" + str2 + "PagerStyleName=" + StyleName + "\" type=\"text/css\" />");
308                }
309            }
310        }
311
312        protected override void Render(HtmlTextWriter writer) 
313        {
314            writer.Write("<div id=\"" + this.ClientID + "\" class=\"" + this._StyleName + " " + this._Align + "\">");
315            int totalPages = CalculateTotalPages();
316
317            if (totalPages <= 1)
318                return;
319
320            if (ShowCurrentPage)
321                RenderCurrentPage(writer);
322
323            AddAttributesToRender(writer);
324
325            writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);
326            RenderFirst(writer);
327
328            RenderPrevious(writer);
329            
330            RenderPagingButtons(writer);
331
332            RenderNext(writer);
333
334            RenderLast(writer);
335
336            RenderCustom(writer);
337
338            writer.Write("</div>");
339
340        }
341        void RenderCustom(HtmlTextWriter writer)
342        {
343            writer.Write("    GO:");
344            txtCustom.RenderControl(writer);
345        }
346
347        void RenderCurrentPage(HtmlTextWriter writer)
348        {
349            writer.Write(String.Format(preString, StyleName, "_total"));
350            writer.Write(string.Format(this.CurrentPageStringFormat, this.PageIndex, this.CalculateTotalPages(), this.TotalRecord));
351            writer.Write(lastString);
352        }
353
354        void RenderFirst(HtmlTextWriter writer) 
355        {
356            int totalPages = CalculateTotalPages();
357
358            if ((PageIndex >= 3) && (totalPages > 5)) 
359            {
360                writer.Write(String.Format(preString,this.StyleName,"first"));
361                firstLink.RenderControl(writer);
362                writer.Write(lastString);
363            }
364        }
365
366        void RenderLast(HtmlTextWriter writer) 
367        {
368            int totalPages = CalculateTotalPages();
369
370            if (((PageIndex + 3) < totalPages) && (totalPages > 5)) 
371            {
372                writer.Write(String.Format(preString,this.StyleName,"last"));
373                lastLink.RenderControl(writer);
374                writer.Write(lastString);
375            }
376        }
377
378        void RenderPrevious(HtmlTextWriter writer) 
379        {
380            Literal l;
381
382            if (HasPrevious) 
383            {
384                writer.Write(String.Format(preString,this.StyleName,"pre"));
385                previousLink.RenderControl(writer);
386                writer.Write(lastString);
387            }
388        }
389
390        void RenderNext(HtmlTextWriter writer) 
391        {
392            if (HasNext) 
393            {
394                writer.Write(String.Format(preString,this.StyleName,"next"));
395                nextLink.RenderControl(writer);
396                writer.Write(lastString);
397            }
398        }
399
400        void RenderButtonRange(int start, int end, HtmlTextWriter writer) 
401        {
402            for (int i = start; i < end; i++) 
403            {
404                if (PageIndex == i+1) 
405                {
406                    writer.Write(String.Format(currentPageString,this.StyleName,(i+1).ToString()));
407                } 
408                else 
409                {
410                    writer.Write(String.Format(preString,this.StyleName,"number"));
411                    pagingHyperLinks[i].RenderControl(writer);
412                    writer.Write(lastString);
413                }
414            }
415        }
416
417        void RenderPagingButtons(HtmlTextWriter writer) 
418        {
419            int totalPages;
420
421            totalPages = CalculateTotalPages();
422
423            if ( totalPages <= 5) 
424            {
425                RenderButtonRange(0, totalPages, writer);
426            } 
427            else 
428            {
429                int lowerBound = (PageIndex - 3);
430                int upperBound = (PageIndex + 2);
431
432                if (lowerBound <= 0)
433                {
434                    lowerBound = 0;
435                    upperBound = 5;
436                }
437
438                if (PageIndex < (totalPages - 2))
439                    RenderButtonRange(lowerBound, upperBound, writer);
440
441                else if (PageIndex >= (totalPages - 2))
442                    RenderButtonRange((totalPages - 5), totalPages, writer);
443            }
444        }
445
446        void AddPageLinks() 
447        {
448            pagingHyperLinks = new HyperLink[CalculateTotalPages()];
449
450            for (int i = 0; i < pagingHyperLinks.Length; i++) 
451            {
452                pagingHyperLinks[i] = new HyperLink();
453                pagingHyperLinks[i].EnableViewState = false;
454                pagingHyperLinks[i].Text = (i + 1).ToString();
455                pagingHyperLinks[i].ID = (i + 1).ToString();
456                pagingHyperLinks[i].NavigateUrl = CreatePagerURL((i + 1).ToString());
457                Controls.Add(pagingHyperLinks[i]);
458            }
459        }
460
461        void AddFirstLastLinks() 
462        {
463            int start = 1;
464            firstLink = new HyperLink();
465            firstLink.ID = "First";
466            firstLink.Text = this.FirstPageText;
467            firstLink.NavigateUrl = CreatePagerURL(start.ToString());
468            Controls.Add(firstLink);
469
470            int last = CalculateTotalPages();
471            lastLink = new HyperLink();
472            lastLink.ID = "Last";
473            lastLink.Text = this.LastPageText;
474            lastLink.NavigateUrl = CreatePagerURL(last.ToString());
475            Controls.Add(lastLink);
476        }
477
478        void AddPreviousNextLinks() 
479        {
480            int previous;
481            
482            if (this.PageIndex < 2)
483                previous = 1;
484            else
485                previous = this.PageIndex-1;
486
487            previousLink = new HyperLink();
488            previousLink.ID = "Prev";
489            previousLink.Text = this.PreviousPageText;
490            previousLink.NavigateUrl = CreatePagerURL(previous.ToString());
491            Controls.Add(previousLink);
492
493            int next = this.PageIndex + 1;
494            nextLink = new HyperLink();
495            nextLink.ID = "Next";
496            nextLink.Text = this.NextPageText;
497            nextLink.NavigateUrl = CreatePagerURL(next.ToString());
498            Controls.Add(nextLink);
499        }
500        
501        /**//// <summary>
502        /// Override how this control handles its controls collection
503        /// </summary>
504        public override ControlCollection Controls
505        {
506            get
507            {
508                EnsureChildControls();
509                return base.Controls;
510            }
511
512        }
513
514        private bool HasPrevious 
515        {
516            get 
517            {
518                if (PageIndex > 0)
519                    return true;
520
521                return false;
522            }
523        }
524
525        private bool HasNext 
526        {
527            get 
528            {
529                if (PageIndex + 1 < CalculateTotalPages() )
530                    return true;
531
532                return false;
533            }
534        }
535
536        /**//// <summary>
537        /// 计算总页数
538        /// </summary>
539        /// 
540        public virtual int CalculateTotalPages() 
541        {
542            int totalPagesAvailable;
543
544            if (TotalRecord == 0)
545                return 0;
546
547            totalPagesAvailable = TotalRecord / PageSize;
548
549            if ((TotalRecord % PageSize) > 0)
550                totalPagesAvailable++;
551
552            return totalPagesAvailable;
553        }
554
555        string currentPageStringFormat = "当前页{0}/{1} 共有{2}条记录";// = "Page {0} of {1} ({2} records) &nbsp;-&nbsp; ";
556        public string CurrentPageStringFormat
557        {
558            get { return currentPageStringFormat; }
559            set { currentPageStringFormat = value; }
560        }
561    }
562}
563

如果有比我还懒的人,可以直接下载下面的DLL:
/Files/bqrm/BqrmPager.rar

转载于:https://www.cnblogs.com/bqrm/archive/2008/04/26/1172477.html

花两个小时,做了个分页控件相关推荐

  1. WPF学习:分页控件

      好多年没有发博了,今天闲暇,把给公司做的ERP分页控件拿出来,有很多都用到分页的,所以就封装了一个UserControl分页控件,效果还不错,可以看看,先! 注意:有用到存储过程. 如果还不明白, ...

  2. KingPager,自己做的分页控件,纯JS,支持所有语言

    效果图如下: 简介: 1.JQuery分页控件,纯JS,支持任何语言 2.全部样式可通过CSS自定义(默认的就很好看) 3.非常灵活,1行代码即可实现分页 调用示例: <html xmlns=& ...

  3. 分页控件 实战 Post篇

    2019独角兽企业重金招聘Python工程师标准>>> 前言: 分页,大伙并不陌生 也许你正用着:DataGrid/GridView自带的分页 也许你正用着:网上流传较广的Aspne ...

  4. 【开源】我的分页控件正式命名为QuickPager ASP.NET2.0分页控件

    分页控件正式命名为 QuickPager ASP.NET2.0分页控件 . 版本号:2.0.0.1 Framework:.net2.0 分页方式:PostBack .URL (暂时没有实现URL的分页 ...

  5. C# devexpress gridcontrol 分页 控件制作

    这个小小的功能实现起来还是有一点点复杂, 分页单独一个usercontrol 出来,导致查询换页 与gridcontrol页面分离,  一般通过换页事件通知girdcontrol 做出查询 查询来说有 ...

  6. java datatable用法_Java中实现DataTable工具类,并利用其实现简单分页控件。

    具体工具类代码,请见我上一个博客. 一.工具类的使用 1.1 DataTable工具类的使用 1.1.1DataTable简单解析 顾名思义,DataTable其实就是一张虚拟数据表,用于存储由数据库 ...

  7. 适用于ASP.NET的自定义分页控件

    前段时间的项目中需要使用到分页控件,在网上找了不少,最终还是自己动手写一个,比较简单,后续功能以后再实现,现把代码及思路写下来,望大家批评指正.分页控件的分页形式大多分三种,一种是用URL传值,通过给 ...

  8. Winform分页控件之纯分页显示处理

    在之前介绍的Winform分页控件中,都以分页控件+显示表格控件作为一个整体性的控件,不可分开,这样做的目的是可以实现更多的操作,集成更多丰富的特性,减少我们开发的工作量,这种情况虽然适用于大多数的情 ...

  9. 【开源】QuickPager ASP.NET2.0分页控件V2.0.0.3 【增加了使用说明】

    ================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================ 最新版本:V ...

最新文章

  1. 推荐SpringBoot互联网企业级别的开源支付系统
  2. 大锅菜机器人_炒菜机器人——烹饪界的一场革命
  3. rust如何改睡袋_腐蚀rust怎么做睡袋 | 手游网游页游攻略大全
  4. python 里面的单下划线与双下划线的区别
  5. python第三方库全部_自动更新Python所有第三方库
  6. 设为首页 和 收藏本站js代码 兼容IE,chrome,ff
  7. JAVA 版本微信公众管理开源项目招募伙伴
  8. 收藏!Java 500 道核心面试题全解析
  9. 关于云计算的讨论,一年就等这一回!
  10. eclipse导入后将普通项目变为java项目build path,no action avilia
  11. 路径 @/ ~/ / ./ ../
  12. Wormhole —— Docker 容器的服务连接代理
  13. adb通过USB或wifi连接手机
  14. rational rose mysql_用Rational Rose来建立数据库表
  15. 大数据对人们生活的积极影响_大数据对生活带来的影响
  16. 解决类似 The word is not correctly spelled等pom文件拼写错误问题
  17. 2022年10大让人惊艳的数据可视化工具,BAT和字节都在用
  18. VIN码识别技术加速汽车后市场服务速度
  19. Apache DolphinScheduler 在叽里呱啦的实战经验
  20. [转帖]程序开发工具

热门文章

  1. neo4j 返回 return
  2. Pandas index详解
  3. 连续3年入围 Gartner 容器竞争格局,阿里云容器服务新布局首次公开
  4. 宿迁市烟草专卖局(公司)系统信息系统运行维护管理办法(试行)
  5. Netty学习总结(4)——图解Netty之Pipeline、channel、Context之间的数据流向
  6. Java基础学习总结(25)——Log4j快速入门教程
  7. php遍历原理,PHP数组遍历与实现原理
  8. spark streaming python实例_kafka+spark streaming代码实例(pyspark+python)
  9. 小括号教学设计导入_如何在教学中凸显出学生的主体地位呢?原来只需要做到这几点即可...
  10. jQuery.Validate 验证,以及 remote验证, 多参数传递