刚在网上看见的一个自定义分页控件,不错的。

 

 

using System;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web;
using System.Web.UI;
using System.Text.RegularExpressions;

namespace Pager.Controls1
{
    /// <summary>
    /// 分页控件
   /// </summary>
    public class Pager : Label, INamingContainer
    {
       #region 成员变量和构造函数
       HttpContext context = HttpContext.Current;
       Label countLabel;
       HyperLink previousButton;
       HyperLink nextButton;
       HyperLink firstButton;
       HyperLink lastButton;
       HyperLink[] pagingLinkButtons;
      
       public override ControlCollection Controls
       {
           get
          {
              EnsureChildControls();
              return base.Controls;
            }
        }

      protected override void CreateChildControls()
      {
          Controls.Clear();
         
          AddCountLabel();

          AddPageButtons();

          AddPreviousNextHyperLinks();

          AddFirstLastHyperLinks();
      }
       #endregion

       #region 呈现方法
        protected override void Render(HtmlTextWriter writer)
       {
 //            修改总页数小于等于1的时候不呈现任何控件
 //            int totalPages = CalculateTotalPages();
//
 //            if (totalPages <= 1)
 //                return;
 
            AddAttributesToRender(writer);
           
            writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);

            RenderCountLabel(writer);

            RenderFirst(writer);

            RenderPrevious(writer);

            RenderPagingButtons(writer);
           
            RenderNext(writer);

            RenderLast(writer);
        }

       void RenderCountLabel(HtmlTextWriter writer)
        {
             countLabel.RenderControl(writer);

             LiteralControl l = new LiteralControl("&nbsp;");
             l.RenderControl(writer);
       }

        void RenderFirst (HtmlTextWriter writer)
        {
            firstButton.RenderControl(writer);

            LiteralControl l = new LiteralControl("&nbsp;");
            l.RenderControl(writer);
        }

        void RenderLast (HtmlTextWriter writer)
        {
            lastButton.RenderControl(writer);

            LiteralControl l = new LiteralControl("&nbsp;");
            l.RenderControl(writer);
        }

       void RenderPrevious (HtmlTextWriter writer)
        {
            previousButton.RenderControl(writer);

             LiteralControl l = new LiteralControl("&nbsp;");
            l.RenderControl(writer);
        }
 
         void RenderNext(HtmlTextWriter writer)
       {
             nextButton.RenderControl(writer);

             LiteralControl l = new LiteralControl("&nbsp;");
             l.RenderControl(writer);
        }
 
        private void RenderButtonRange(int start, int end, HtmlTextWriter writer)
        {
             for (int i = start; i < end; i++)
             {
                if (PageIndex == i)
                {
                     Literal l = new Literal();
                    l.Text = "<font color =red>" + (i + 1).ToString() + "</font>";

                    l.RenderControl(writer);
                }
                else
                {
                    pagingLinkButtons[i].RenderControl(writer);
                }
                if (i < (end - 1))
                     writer.Write("&nbsp;");
             }
 
             LiteralControl l1 = new LiteralControl("&nbsp;");
            l1.RenderControl(writer);
        }

         private void RenderPagingButtons(HtmlTextWriter writer)
        {
             int totalPages;

             totalPages = CalculateTotalPages();
 
            if (totalPages <= 10)
             {
                RenderButtonRange(0, totalPages, writer);
             }
             else
             {
                 int lowerBound = (PageIndex - 4);
                 int upperBount = (PageIndex + 6);

                 if (lowerBound <= 0)
                    lowerBound = 0;
 
                 if (PageIndex <= 4)
                     RenderButtonRange(0, 10, writer);
 
                 else if (PageIndex < (totalPages - 5))
                    RenderButtonRange(lowerBound, (PageIndex + 6), writer);

                 else if (PageIndex >= (totalPages - 5))
                     RenderButtonRange((totalPages - 10), totalPages, writer);
            }
         }

         #endregion
 
         #region 控件树方法
        /// <summary>
         /// 信息标签
         /// </summary>
         void AddCountLabel()
        {
            countLabel = new Label();
            countLabel.ID = "countLabel";
            countLabel.Text = string.Format(text, CalculateTotalPages().ToString("n0"));

             Controls.Add(countLabel);
         }
 
        private void AddPageButtons()
        {
             pagingLinkButtons = new HyperLink[CalculateTotalPages()];
 
             for (int i = 0; i < pagingLinkButtons.Length; i++)
             {
                 pagingLinkButtons[i] = new HyperLink();
                 pagingLinkButtons[i].EnableViewState = false;
                 pagingLinkButtons[i].Text = (i + 1).ToString();
                 pagingLinkButtons[i].ID = i.ToString();
                 pagingLinkButtons[i].CssClass = linkCss;
                 pagingLinkButtons[i].NavigateUrl = GetHrefString(i);
 
                 Controls.Add(pagingLinkButtons[i]);
             }
         }
 
         /// <summary>
         /// 首页末页
         /// </summary>
         void AddFirstLastHyperLinks()
         {
             firstButton = new HyperLink();
             firstButton.ID = "First";
             firstButton.Text = "首页";
             if(PageIndex != 0 && CalculateTotalPages() > 0)
             {
                 firstButton.NavigateUrl = GetHrefString(0);
             }
             else
             {
                 firstButton.Enabled = false;
             }
            
             Controls.Add(firstButton);
 
             lastButton = new HyperLink();
             lastButton.ID = "Last";
             lastButton.Text = "末页";
             if(PageIndex != CalculateTotalPages() - 1)
             {
                 lastButton.NavigateUrl = GetHrefString(CalculateTotalPages() - 1);
             }
             else
             {
                 lastButton.Enabled = false;
             }
             Controls.Add(lastButton);
         }
 
         /// <summary>
         /// 上一页下一页
         /// </summary>
         void AddPreviousNextHyperLinks()
         {
             previousButton = new HyperLink();
             previousButton.ID = "Prev";
             previousButton.Text = "上一页";
             if (HasPrevious)
             {
                 previousButton.NavigateUrl = GetHrefString(PageIndex - 1);
             }
             else
             {
                 previousButton.Enabled = false;
             }
             Controls.Add(previousButton);
 
             nextButton = new HyperLink();
             nextButton.ID = "Next";
             nextButton.Text = "下一页";
             if(HasNext)
             {
                 nextButton.NavigateUrl = GetHrefString(PageIndex + 1);
             }
             else
             {
                 nextButton.Enabled = false;
             }
             Controls.Add(nextButton);
         }
         #endregion
 
         #region 私有属性
         private bool HasPrevious
         {
             get
             {
                 if (PageIndex > 0)
                     return true;
 
                 return false;
             }
         }
 
         private bool HasNext
         {
            get
             {
                 if (PageIndex + 1 < CalculateTotalPages() )
                     return true;
 
                 return false;
             }
         }
         #endregion
 
         #region 帮助方法和公共属性
        
         /// <summary>
         /// 获取分页导航按钮的超链接字符串
         /// </summary>
         /// <param name="pageIndex">该分页按钮相对应的页索引</param>
         /// <returns>分页导航按钮的超链接字符串</returns>
         private string GetHrefString(int pageIndex)
         {
             string url = Page.Request.RawUrl;
 
             if (Regex.IsMatch(url, @"(/d+).shtml", RegexOptions.IgnoreCase))
             {
                 url = Regex.Replace(url, @"(/d+).shtml", pageIndex + ".shtml");
             }
 
             if (Regex.IsMatch(url, @"PageIndex=(/d+)", RegexOptions.IgnoreCase))
             {
                 url = Regex.Replace(url, @"PageIndex=(/d+)", "PageIndex=" + pageIndex.ToString());
             }
 
             return Page.Server.UrlPathEncode(url);
         }
 
         public int CalculateTotalPages()
         {
             int totalPagesAvailable;
 
             if (TotalRecords == 0)
                 return 0;
 
             totalPagesAvailable = TotalRecords / PageSize;
 
             if ((TotalRecords % PageSize) > 0)
                 totalPagesAvailable++;
 
             return totalPagesAvailable;
         }
 
         /// <summary>
         /// 当前页
         /// </summary>
         public int PageIndex
         {
             get
             {
                 int _pageIndex = 0;
 
                 if ((!Page.IsPostBack) && context.PageIndex>0)
                     _pageIndex = context.PageIndex;
                 else
                     _pageIndex = Convert.ToInt32(ViewState["PageIndex"]);
 
                 if (_pageIndex < 0)
                     return 0;
                 else
                 {
                     if (_pageIndex > CalculateTotalPages()-1)
                         return CalculateTotalPages()-1;
                     else
                         return _pageIndex;
                 }
             }
             set
             {
                 ViewState["PageIndex"] = value;
             }
         }
 
         /// <summary>
         /// 每页记录数
         /// </summary>
         public int PageSize
         {
             get
             {
                 int pageSize = Convert.ToInt32(ViewState["PageSize"]);
 
                 if (pageSize == 0)
                 {
                     return 10;
                 }
 
                 return pageSize;
             }
             set
             {
                 ViewState["PageSize"] = value;
             }
 
         }
 
         /// <summary>
         /// 总记录数
         /// </summary>
         public int TotalRecords
         {
             get
             {
                 return Convert.ToInt32(ViewState["TotalRecords"]);
             }
             set
             {
                 ViewState["TotalRecords"] = value;
             }
         }
 
         private string text = "共{0}页";
 
         private string linkCss = "";
         /// <summary>
         /// 链接样式
         /// </summary>
         public string LinkCss
         {
             get { return linkCss; }
             set { linkCss = value;}
         }
 
         private string textCss = "";
        /// <summary>
         /// 文字样式
         /// </summary>
         public string TextCss
         {
            get { return textCss; }
             set { textCss = value;}
         }
 
         public string TextFormat
         {
             get
             {
                 return text;
             }
             set
             {
                 text = value;
             }
         }
 
         #endregion
     }
 } 

 

aspx页面:

<%@ Page Language="C#" %>

<%@ Register Assembly="PagerControls" Namespace="Pager.Controls" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" AllowSorting="True" AutoGenerateColumns="False"
            BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px"
            CellPadding="3" DataSourceID="SqlDataSource1" ForeColor="Black" GridLines="Vertical">
            <FooterStyle BackColor="#CCCCCC" />
            <Columns>
                <asp:BoundField DataField="username" HeaderText="username" SortExpression="username">
                    <ItemStyle ForeColor="Red" />
                </asp:BoundField>
                <asp:BoundField DataField="password" HeaderText="password" SortExpression="password" />
                <asp:BoundField DataField="email" HeaderText="email" SortExpression="email" />
            </Columns>
            <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
            <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
            <HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
            <AlternatingRowStyle BackColor="#CCCCCC" />
        </asp:GridView>
        &nbsp; &nbsp;<br />
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
            SelectCommand="SELECT [username], [password], [email] FROM [user]"></asp:SqlDataSource>
        <cc1:Pager ID="Pager1" runat="server"></cc1:Pager></div>
    </form>
</body>
</html>

注:要将CS源码编译成DLL文件放于bin目录下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值