.Net通用分页类(存储过程分页版,完全自定义显示样式,包括中英显示)

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. /**//// <summary>
  5. /// .Net通用分页类(存储过程分页版,完全自定义显示样式,包括中英显示)
  6. /// 作者:启程 www.letwego.cn
  7. /// 可用于任意用途,请保留作者信息,谢谢!
  8. /// </summary>
  9. namespace Ask.Common
  10. {
  11.     /**//// <summary>
  12.     /// 分页(只处理分页,与数据无关)
  13.     /// </summary>
  14.     public class PageStyle
  15.     {
  16.         初始构造#region 初始构造
  17.         public PageStyle(string Language)
  18.         {
  19.             if (Language == "EN")//英文默认
  20.             {
  21.                 PageString = "Page [PageIndex]/[TotalPage]  Info [PageSize]/[TotalRecord]  [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr]  [TurnControl]";
  22.                 TurnUrlStr = "";
  23.                 PageSize = 20;
  24.                 PageIndex = 1;
  25.                 TotalRecord = 0;
  26.                 FirstStr = "<<";
  27.                 PrevStr = "<";
  28.                 NextStr = ">";
  29.                 LastStr = ">>";
  30.                 NoRecord = "Total 0";
  31.                 ButtonStr = " GO ";
  32.                 TotalPage = 0;
  33.                 TurnControl = "";
  34.                 PageNumber = "";
  35.                 ShowPageStr = "";
  36.             }
  37.             else//中文默认
  38.             {
  39.                 PageString = "第[PageIndex]页/共[TotalPage]页  第每[PageSize]条/共[TotalRecord]条  [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr]  [TurnControl]";
  40.                 TurnUrlStr = "";
  41.                 PageSize = 20;
  42.                 PageIndex = 1;
  43.                 TotalRecord = 0;
  44.                 FirstStr = "首页";
  45.                 PrevStr = "上一页";
  46.                 NextStr = "下一页";
  47.                 LastStr = "尾页";
  48.                 NoRecord = "共有 0 条信息";
  49.                 ButtonStr = "跳转";
  50.                 TotalPage = 0;
  51.                 TurnControl = "";
  52.                 PageNumber = "";
  53.                 ShowPageStr = "";
  54.             }
  55.         }
  56.         #endregion
  57.         字段 公共#region 字段 公共
  58.         /**//// <summary>
  59.         /// 具体样式(需要显示哪些内容)
  60.         /// </summary>
  61.         public string PageString;
  62.         /**//// <summary>
  63.         /// 跳转 的url链接
  64.         /// </summary>
  65.         public string TurnUrlStr;
  66.         /**//// <summary>
  67.         /// 跳转的url链接的参数前面不要加问号和与号
  68.         /// </summary>
  69.         public string Parameters;
  70.         /**//// <summary>
  71.         /// 每页记录数
  72.         /// </summary>
  73.         public int PageSize;
  74.         /**//// <summary>
  75.         /// 需要获取第几页的数据,从 1 开始
  76.         /// </summary>
  77.         public int PageIndex;
  78.         /**//// <summary>
  79.         /// 总记录数
  80.         /// </summary>
  81.         public int TotalRecord;
  82.         /**//// <summary>
  83.         /// 首页 显示样式
  84.         /// </summary>
  85.         public string FirstStr;
  86.         /**//// <summary>
  87.         /// 上一页 显示样式
  88.         /// </summary>
  89.         public string PrevStr;
  90.         /**//// <summary>
  91.         /// 下一页 显示样式
  92.         /// </summary>
  93.         public string NextStr;
  94.         /**//// <summary>
  95.         /// 尾页 显示样式
  96.         /// </summary>
  97.         public string LastStr;
  98.         /**//// <summary>
  99.         /// 没有记录时显示的信息
  100.         /// </summary>
  101.         public string NoRecord;
  102.         /**//// <summary>
  103.         /// 跳转按钮文字
  104.         /// </summary>
  105.         public string ButtonStr;
  106.         #endregion
  107.         字段 私有#region 字段 私有
  108.         /**//// <summary>
  109.         /// 总页数
  110.         /// </summary>
  111.         private int TotalPage;
  112.         /**//// <summary>
  113.         /// 跳转控件
  114.         /// </summary>
  115.         private string TurnControl;
  116.         /**//// <summary>
  117.         /// 存储中间的内容(如 1 2 3 页码)
  118.         /// </summary>
  119.         private string PageNumber;
  120.         /**//// <summary>
  121.         /// 显示页码的总字符
  122.         /// </summary>
  123.         private string ShowPageStr;
  124.         #endregion
  125.         获取最终页码显示#region 获取最终页码显示
  126.         /**//// <summary>
  127.         /// 获取最终页码显示
  128.         /// </summary>
  129.         /// <param name="Style">样式(1 是上下页,2 是显示一批页码)</param>
  130.         /// <param name="PlaceIn">固定当前页在第几个位置(样式2用)</param>
  131.         /// <param name="ShowNum">一页显示几个页码(样式2用)</param>
  132.         /// <returns>最终页码显示</returns>
  133.         public string GetShowPageStr(string Style, int PlaceIn, int ShowNum)
  134.         {
  135.             TotalPage = (TotalRecord + PageSize - 1) / PageSize;
  136.             //超出最小页码
  137.             if (PageIndex < 1)
  138.             {
  139.                 PageIndex = 1;
  140.             }
  141.             //超出最大页码
  142.             if (PageIndex > TotalPage)
  143.             {
  144.                 PageIndex = TotalPage;
  145.             }
  146.             //跳转
  147.             TurnControl = "<input value='" + PageIndex.ToString() + "' id='txtPageGo' name='txtPageGo' type='text' style='width:35px;' οnkeydοwn=/"if(event.keyCode==13)window.location.href='" + TurnUrlStr + "?Page=' + document.getElementById('txtPageGo').value + '" + "&" + Parameters + "'/"><input name='btnGo' type='button' id='btnGo' value='" + ButtonStr + "' οnclick=/"javascript:window.location.href='" + TurnUrlStr + "?Page=' + document.getElementById('txtPageGo').value + '" + "&" + Parameters + "'/">";
  148.             //没有记录
  149.             if (TotalRecord <= 0)
  150.             {
  151.                 ShowPageStr = NoRecord;
  152.             }
  153.             //有记录
  154.             else
  155.             {
  156.                 //只有一页
  157.                 if (TotalPage <= 1)
  158.                 {
  159.                     ShowPageStr = "共有 " + TotalRecord.ToString() + " 条信息";
  160.                 }
  161.                 //不止一页
  162.                 else
  163.                 {
  164.                     //第一页
  165.                     if (PageIndex == 1)
  166.                     {
  167.                     }
  168.                     else
  169.                     {
  170.                         FirstStr = "<a href=/"" + TurnUrlStr + "?Page=1" + "&" + Parameters + "/">" + FirstStr + "</a>";
  171.                         PrevStr = "<a href=/"" + TurnUrlStr + "?Page=" + Convert.ToString(PageIndex - 1) + "&" + Parameters + "/">" + PrevStr + "</a>";
  172.                     }
  173.                     //最后一页
  174.                     if (PageIndex == TotalPage)
  175.                     {
  176.                     }
  177.                     else
  178.                     {
  179.                         NextStr = "<a href=/"" + TurnUrlStr + "?Page=" + Convert.ToString(PageIndex + 1) + "&" + Parameters + "/">" + NextStr + "</a>";
  180.                         LastStr = "<a href=/"" + TurnUrlStr + "?Page=" + TotalPage + "&" + Parameters + "/">" + LastStr + "</a>";
  181.                     }
  182.                 }
  183.                 样式一: 共X条信息 第N页/共M页 首页 上一页 下一页 尾页  跳转#region 样式一: 共X条信息 第N页/共M页 首页 上一页 下一页 尾页  跳转
  184.                 if (Style == "1")
  185.                 {
  186.                     PageNumber = "";
  187.                 }
  188.                 #endregion
  189.                 样式三: 共X条信息 第N页/共M页 首页 1 2 3 尾页 跳转 当前页码定位在第 PlaceIn 位#region 样式三: 共X条信息 第N页/共M页 首页 1 2 3 尾页 跳转 当前页码定位在第 PlaceIn 位
  190.                 if (Style == "2")
  191.                 {
  192.                     int PageTemp = 0;
  193.                     if (PlaceIn < 1 || PlaceIn > ShowNum)
  194.                     {
  195.                         PlaceIn = 2;//前面保持有两个,则当前页码定位在第3位
  196.                     }
  197.                     else
  198.                     {
  199.                         PlaceIn = PlaceIn - 1;//前面保持有 PlaceIn - 1 个
  200.                     }
  201.                     string strPageNum = "";
  202.                     string strTempNow = "";
  203.                     //当页码总数 <= 一页要显示的页码数
  204.                     if (TotalPage <= ShowNum)
  205.                     {
  206.                         for (int i = 1; i <= TotalPage; i++)
  207.                         {
  208.                             strTempNow = Convert.ToString(PageTemp + i);
  209.                             //当前页不显示超链接
  210.                             if (PageIndex == PageTemp + i)
  211.                             {
  212.                                 strPageNum = strPageNum + "<b>" + strTempNow + "</b>  ";
  213.                             }
  214.                             else
  215.                             {
  216.                                 strPageNum = strPageNum + "<a href=/"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "/">[" + strTempNow + "]</a>  ";
  217.                             }
  218.                         }
  219.                     }
  220.                     else
  221.                     {
  222.                         //当前页码 <= 固定位置 PlaceIn
  223.                         if (PageIndex <= PlaceIn)
  224.                         {
  225.                             for (int i = 1; i <= ShowNum; i++)
  226.                             {
  227.                                 strTempNow = Convert.ToString(i);
  228.                                 //当前页不显示超链接
  229.                                 if (PageIndex == i)
  230.                                 {
  231.                                     strPageNum = strPageNum + "<b>" + strTempNow + "</b>  ";
  232.                                 }
  233.                                 else
  234.                                 {
  235.                                     strPageNum = strPageNum + "<a href=/"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "/">[" + strTempNow + "]</a>  ";
  236.                                 }
  237.                             }
  238.                         }
  239.                         //当前页码 >=最后一批该显示
  240.                         else if (PageIndex >= TotalPage - ShowNum + PlaceIn + 1)
  241.                         {
  242.                             //第一个显示的数字
  243.                             PageTemp = TotalPage - ShowNum + 1;
  244.                             for (int i = PageTemp; i <= TotalPage; i++)
  245.                             {
  246.                                 if (i > TotalPage) break;
  247.                                 strTempNow = Convert.ToString(i);
  248.                                 //当前页不显示超链接
  249.                                 if (PageIndex == i)
  250.                                 {
  251.                                     strPageNum = strPageNum + "<b>" + strTempNow + "</b>  ";
  252.                                 }
  253.                                 else
  254.                                 {
  255.                                     strPageNum = strPageNum + "<a href=/"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "/">[" + strTempNow + "]</a>  ";
  256.                                 }
  257.                             }
  258.                         }
  259.                         else
  260.                         {
  261.                             for (int i = PageIndex - PlaceIn; i < PageIndex - PlaceIn + ShowNum; i++)
  262.                             {
  263.                                 strTempNow = Convert.ToString(i);
  264.                                 //当前页不显示超链接
  265.                                 if (i == PageIndex)
  266.                                 {
  267.                                     strPageNum = strPageNum + "<b>" + strTempNow + "</b>  ";
  268.                                 }
  269.                                 else
  270.                                 {
  271.                                     strPageNum = strPageNum + "<a href=/"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "/">[" + strTempNow + "]</a>  ";
  272.                                 }
  273.                             }
  274.                         }
  275.                     }
  276.                     PageNumber = strPageNum;
  277.                 }
  278.                 #endregion
  279.             }
  280.             ShowPageStr = PageString;
  281.             ShowPageStr = ShowPageStr.Replace("[PageIndex]", PageIndex.ToString());//
  282.             ShowPageStr = ShowPageStr.Replace("[TotalPage]", TotalPage.ToString());//
  283.             ShowPageStr = ShowPageStr.Replace("[PageSize]", PageSize.ToString());//
  284.             ShowPageStr = ShowPageStr.Replace("[TotalRecord]", TotalRecord.ToString());//
  285.             ShowPageStr = ShowPageStr.Replace("[FirstStr]", FirstStr);//
  286.             ShowPageStr = ShowPageStr.Replace("[PrevStr]", PrevStr);//
  287.             ShowPageStr = ShowPageStr.Replace("[NextStr]", NextStr);//
  288.             ShowPageStr = ShowPageStr.Replace("[LastStr]", LastStr);//
  289.             ShowPageStr = ShowPageStr.Replace("[TurnControl]", TurnControl);//
  290.             ShowPageStr = ShowPageStr.Replace("[PageNumber]", PageNumber);//
  291.             return ShowPageStr;
  292.         }
  293.         #endregion
  294.     }
  295.     调用实例#region 调用实例
  296.     /**//*
  297.     protected void BindData()
  298.     {
  299.         PageStyle MyPage = new PageStyle("EN");//创建类
  300.         MyPage.PageSize = MyPageSize;//页码大小
  301.         MyPage.TotalRecord = Counts;//总记录数
  302.         MyPage.TurnUrlStr = "AskSearchList.aspx";//要跳转的页面(当前页)
  303.         MyPage.Parameters = MyParameters;//页面所带参数
  304.         MyPage.PageIndex = PageIndex;//当前要显示的页码
  305.         //具体样式
  306.         MyPage.PageString = "第[PageIndex]页/共[TotalPage]页  第每[PageSize]条/共[TotalRecord]条  [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr]  [TurnControl]";
  307.         string strPage = MyPage.GetShowPageStr("2", 3, 10);
  308.         labShowPage.Text = strPage;
  309.     }
  310.     */
  311.     #endregion
  312.     简要说明#region 简要说明
  313.     /**//*
  314.     .Net通用分页类(存储过程分页版,可以完全自定义显示样式,包括中英显示).
  315.     大概思路是:主要是利用存储过程在数据库进行分页,
  316.     所以在这个类里面不涉及到数据的处理,只进行页码的显示格式处理,
  317.     配合SQL2005 的 ROW_NUMBER () 功能,能够达到更好的效果.
  318.     显示样式可以完全自定义,,用图片也可以,只是要把字符串拼成图片的Html
  319.     效果图:http://images.cnblogs.com/cnblogs_com/84ww/128905/r_PageStore.gif
  320.     */
  321.     #endregion
  322.     附 存储过程例子#region 附 存储过程例子
  323.     /**//*
  324.     CREATE PROCEDURE dbo.sp_userinfoList
  325.         @strOptions varchar(200) = NULL,
  326.         @PageSize int = 20,
  327.         @PageIndex int = 1,
  328.         @Counts int = 0 OUTPUT
  329.     AS
  330.     SET NOCOUNT ON
  331.     SET ANSI_WARNINGS OFF
  332.     DECLARE @PageUp int
  333.     DECLARE @PageDown int    
  334.     
  335.     --处理页大小
  336.     IF @PageSize = -1 SET @PageSize = 20
  337.     --获得总记录数
  338.     SELECT @Counts = COUNT(1) FROM userinfo
  339.     --当前页的第一条记录RowID
  340.     SET @PageDown = @PageSize * @PageIndex + 1
  341.     --当前页的最后一条记录RowID
  342.     SET @PageUp = @PageSize * (@PageIndex + 1)
  343.     --  信息列表  
  344.     IF @strOptions='LIST' BEGIN
  345.         SELECT
  346.             id,
  347.             user,
  348.             password,
  349.             datetime,
  350.             content
  351.         FROM
  352.         (
  353.             SELECT * ,
  354.             PageTableRowID = ROW_NUMBER () OVER (ORDER BY id DESC)
  355.             FROM userinfo
  356.         ) AS PageTableList
  357.         WHERE PageTableRowID BETWEEN @PageDown AND @PageUp 
  358.     END
  359.     */
  360.     #endregion
  361. }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值