完善自定义分页控件

上一篇写了一个简单的自定义分页控件,当时写的不够完善,不能自定义控件的样式.现在完善了,望同 大家共同探讨.

现在已经在网上发布的分页控件特别多,而且大多都功能特别强,但是之所以选择自己写,主要是因为自 己写可以根据自己的要求来设计,不用的功能就功能免了.

本控件可以自定义样式,而且传入的参数和其它常用的分页控件差不多,记录总数和一页的数量,是否自 定义样式,当页面数量特别多的时候,可以在分页信息栏中显示前几页和后几页.

具体代码如下:

using System;using System.Collections.Generic;using 

System.ComponentModel;using System.Text;using System.Web;using 

System.Web.UI;using System.Web.UI.WebControls;namespace pagerControls{    

[DefaultProperty("Text")]    [ToolboxData("<{0}:WebCustomControlPager 

runat=server></{0}:WebCustomControlPager>")]    public class 

WebCustomControlPager : WebControl    {        private string _pageUrl="";         /**//// <summary>         /// 当前页面地址  

       /// </summary>        [Bindable(true)]        [CategoryAttribute("Appearance")]        [DefaultValue("")]        [Localizable(true)]        [DescriptionAttribute("当前页面地址")]        public virtual string pageUrl        {            get            {                

return this._pageUrl;            }            set            {               

 this ._pageUrl  = value;            }        }        private int _currentPageIndex;        /**//// <summary>        /// 当前页面索引        

/// </summary>        [Bindable(true)]        [CategoryAttribute("Appearance")]        [Localizable(true)]        [DescriptionAttribute("当前页面索引从1开始")]        [DefaultValueAttribute("当前页面索引")]        public virtual int currentPageIndex        {            get  

          {                return this._currentPageIndex;            }           

 set            {                this._currentPageIndex = value;            }

        }        private int _IsCustomStyle;        /**//// <summary>  

      /// 是否自定义样式        /// 0:不是 1:是        /// </summary>      

  [Bindable(true)]        [CategoryAttribute("Appearance")]        

[Localizable(true)]        [DescriptionAttribute("是否自定义样式")]        

[DefaultValueAttribute("0")]        public virtual int IsCustomStyle       

 {            get            {                return this._IsCustomStyle;    

        }            set            {                this._IsCustomStyle = 

value;            }        }        private int _iRecordCount=1;        

/**//// <summary>        /// 记录数量        /// </summary>        

[Bindable(true)]        [CategoryAttribute("Appearance")]        

[Localizable(true)]        [DescriptionAttribute("记录数量")]        

[DefaultValueAttribute("记录数量")]        public virtual int iRecordCount 

       {            get            {                return this._iRecordCount;            }            set            {                this._iRecordCount = value;            }        }        private int _iRowsCount=10;        /**//// <summary>        /// 每页记录数量        

/// </summary>        [Bindable(true)]        [CategoryAttribute

("Appearance")]        [Localizable(true)]        [DescriptionAttribute("每页记录数量")]        [DefaultValueAttribute("每页记录数量")] 

       public virtual int iRowsCount        {            get            {    

            return this._iRowsCount;            }            set            

{                this._iRowsCount = value;            }        }        

private int _iPrevCount=5;        /**//// <summary>        /// 前部分记录数量

        /// </summary>        [Bindable(true)]        [CategoryAttribute("Appearance")]        [Localizable(true)]        [DescriptionAttribute("前部分记录数量")]        [DefaultValueAttribute("前部分记录数量")]        public virtual int iPrevCount        {            get        

    {                return this._iPrevCount;            }            set    

        {                this._iPrevCount = value;            }        }     

   private int _iNextCount=5;        /**//// <summary>        /// 后部分记录数量        /// </summary>        [Bindable(true)]        

[CategoryAttribute("Appearance")]        [Localizable(true)]        

[DescriptionAttribute("后部分记录数量")]        [DefaultValueAttribute("后部分记录数量")]        public virtual int iNextCount        {            

get            {                return this._iNextCount  ;

}  

          set            {                this._iNextCount = value;            

}        }        /**//// <summary>        /// 取得默认样式表信息      

  /// by minjiang 08-3-24        /// </summary>        /// 

<returns></returns>        private string styleHtml()        {       

     //分页样式表信息            string sStyle = "";            

StringBuilder strbStyle = new StringBuilder();            sStyle = "<style type =\"text/css\" >";            strbStyle.Append(sStyle);            

样式内容#region 样式内容            sStyle = ".a4:link,.a4:visited,.a4:active

{color:#207FC3;font-size:12px;text-decoration:none;}";            strbStyle.Append

(sStyle);            sStyle = ".a4:hover{color:#ff6600;font-size:12px;text-

decoration:none;}";            strbStyle.Append(sStyle);            sStyle = 

".a5:link,.a5:visited,.a5:active{color:#ffffff;font-size:12px;text-decoration:none;}

";            strbStyle.Append(sStyle);            sStyle = ".a5:hover

{color:#ffffff;font-size:12px;text-decoration:none;}";            strbStyle.Append

(sStyle);            sStyle = ".survey_pagediv {float:left;width:950px;height:22px; 

margin-top:15px;}";            strbStyle.Append(sStyle);            sStyle = 

".survey_pagediv .pagedivcenter { width:600px; margin: 0 auto;}";            

strbStyle.Append(sStyle);            sStyle = ".survey_pagediv .page { 

float:left;width:auto;font-family: Verdana, Arial, Helvetica, sans-serif;}";        

    strbStyle.Append(sStyle);            sStyle = ".survey_pagediv .page .select

{float:left;height:16px;line-height:16px;padding:0 4px 0 4px;display:block;border:solid 1px 

#207FC3;margin:0 2px 0 2px;background-color:#207FC3;}";            

strbStyle.Append(sStyle);            sStyle = ".survey_pagediv .page .num

{float:left;height:16px;line-height:16px;padding:0 4px 0 4px;display:block;border:solid 1px 

#207FC3;margin:0 2px 0 2px;}";            strbStyle.Append(sStyle);            

sStyle = ".survey_pagediv .page span{float:left;height:18px;line-

height:18px;display:block;margin:0 4px 0 4px;}";            strbStyle.Append

(sStyle);            sStyle = ".survey_pagediv_nodiv { float:left; width:230px; 

height:auto; border:solid 1px #C2E8C7; background-color:#FBFFFB; padding:5px;}";    

        strbStyle.Append(sStyle);            sStyle = ".survey_pagediv_nodiv1 { 

float:left; width:230px; height:155px; border:solid 1px #FFD4E3; background-color:#FFFCFE; 

padding:5px; text-align:center; line-height:155px;}";            strbStyle.Append

(sStyle);            #endregion            sStyle = "</style>";  

          strbStyle.Append(sStyle);            //样式内容结尾            sStyle = 

strbStyle.ToString();            return sStyle;        }        protected 

override void RenderContents(HtmlTextWriter output)        {            //分页样式表

信息            string sStyle = "";            if (this.IsCustomStyle == 

0)            {                sStyle = this.styleHtml();            }       

     //分页信息            string sPagerHtml = "";            sPagerHtml = 

this.CSgetPagerHtml(this .iRecordCount , this .iRowsCount , this.pageUrl , this 

.currentPageIndex );            sPagerHtml = sStyle + sPagerHtml;            

output.Write(sPagerHtml);        }        /**//// <summary>        /// 取

得分页信息        /// by minjiang 08-3-11        /// </summary>        /// 

<param name="recordCount">记录总数</param>        /// <param 

name="iRowsCount">每页记录大小</param>        /// <param 

name="pageUrl">页面地址</param>        /// 

<returns></returns>        public string CSgetPagerHtml(int recordCount, int 

iRowsCount, string pageUrl, int  iCurrentPageIndex)        {            int 

intPrevPageCount = this .iPrevCount ;            int intNextPageCount = this .iNextCount 

;            //如果小于此数字则不显示省略号            int intDefaultCount = this 

.iNextCount +this .iPrevCount ;            StringBuilder strb = new StringBuilder(); 

           string info = "";            info = "<div 

class=\"survey_pagediv\"><div class=\"pagedivcenter\"><div 

class=\"page\">";            strb.Append(info);            //链接

地址            if (pageUrl.IndexOf("page=") != -1)            {       

         int pageIndex = pageUrl.IndexOf("page=");                pageUrl = 

pageUrl.Substring(0, pageIndex + 5);            }            else            

{                //如果页面没有任何参数则加上?与参数                if 

(pageUrl.IndexOf("?") == -1)                {                    pageUrl 

+= "?page=";                }                else                { 

                   //如果只是没有page参数则加上些参数                    pageUrl += 

"&page=";                }            }            //页面总数  

          int pageCount = 1;            if (recordCount > 0)            {     

           if (recordCount % iRowsCount == 0)                { pageCount = recordCount / 

iRowsCount; }                else                {                    if 

(recordCount>iRowsCount)                    {                        //如果页面数

量大于1                        pageCount = recordCount / iRowsCount + 1;             

       }                    else                    {                        //

不显示分页信息                        return "";                    }  

              }            }            if (pageCount < 1)            {   

             //如果只有一页则不显示分页信息                return "";      

      }            int currentPage = iCurrentPageIndex ;            //int.TryParse

(sCurrentPageIndex, out currentPage);            if (currentPage < 1)            

{                currentPage = 1;            }            //上一页索引       

     int prevPage = 1;            prevPage = currentPage - 1;            if 

(prevPage < 1)            { prevPage = 1; }            //下一页索引           

 int nextPage = 1;            nextPage = currentPage + 1;            if (nextPage 

> pageCount)            { nextPage = 1; }            //开始的索引页           

 int startPageIndex = currentPage;            //要统计的页面总数            int 

pageTotalCount = pageCount - currentPage + 1;            if (currentPage != 1)       

     {                //如果当前页面不是首页则显示上一页                info = 

"<span><a href=\"" + pageUrl + prevPage.ToString() + 

"\">&lt;&lt;上一页 </a></span>";                

strb.Append(info);            }            //回首页            info = 

"<span><a href=\"" + pageUrl + "1\">首页

</a></span>";            strb.Append(info);            string 

pageClass = "num a4";            //当前页的样式为select a5            //如

果页数小于等于10页则不显示省略号            if (pageCount <= intDefaultCount)     

       {                for (int kk = 1; kk <= pageCount; kk++)                

{                    pageClass = "num a4";                    if (kk == 

currentPage)                    {                        pageClass = "select 

a5";                    }                    info = "<a 

href=\"" + pageUrl + kk.ToString() + "\" class=\"" + pageClass 

+ "\">" + kk.ToString() + "</a>";                    

strb.Append(info);                }                //下一页地址                

//info = "<span><a href=\"" + pageUrl + nextPage.ToString() + 

"\">下一页&gt;&gt;</a></span>";                

//strb.Append(info);                info = strb.ToString();                return 

info;            }            //省略号前显示5页            if (pageTotalCount 

<= intDefaultCount )            {                //如果要统计的页面数量小于分页前

部分数量加分页后部分数量                //要统计的页面数量与分页前部分数量加分页后部分数

量的差额                //分页栏总是显示分页前部分数量加分页后部分数量个页面链接     

           int iDispersion = intDefaultCount - pageTotalCount;                for (int k 

= currentPage-iDispersion ; k <= pageCount; k++)                {                 

   pageClass = "num a4";                    if (k == currentPage)          

          {                        pageClass = "select a5";                

    }                    info = "<a href=\"" + pageUrl + k.ToString() 

+ "\" class=\"" + pageClass + "\">" + k.ToString() + 

"</a>";                    strb.Append(info);                }   

         }            else            {                for (int k = currentPage; 

k <= currentPage + intPrevPageCount - 1; k++)                {                    

pageClass = "num a4";                    if (k == currentPage)             

       {                        pageClass = "select a5";                   

 }                    info = "<a href=\"" + pageUrl + k.ToString() + 

"\" class=\"" + pageClass + "\">" + k.ToString() + 

"</a>";                    strb.Append(info);                }   

             if (pageTotalCount > (intPrevPageCount + intNextPageCount))              

  {                    //如果要统计的页面总数大于省略号前的记录加省略号后面的记录数量则

显示 ""                    info = " <span></span>";  

                  strb.Append(info);                }                //开始索引  

              int _iNextSatrIndex = pageCount - intNextPageCount+1;                for 

(int j = _iNextSatrIndex; j <= pageCount; j++)                {                   

 pageClass = "num a4";                    if (j == currentPage)            

        {                        pageClass = "select a5";                  

  }                    info = "<a href=\"" + pageUrl + j.ToString() + 

"\" class=\"" + pageClass + "\">" + j.ToString() + 

"</a>";                    strb.Append(info);                }   

         }            //回末页            //info = "<span><a 

href=\"" + pageUrl +pageCount .ToString ()+ "\"> 末页

</a></span>";            //strb.Append(info);            if 

(currentPage != pageCount)            {                //如果不是最后一页则显示下一

页                info = "<span><a href=\"" + pageUrl + 

nextPage.ToString() + "\">下一页

&gt;&gt;</a></span>";                strb.Append(info);     

       }            info = "</div></div></div>";         

   strb.Append(info);            info = strb.ToString();            return info; 

       }    }}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, 页面
, 样式
, append
, this
, localizable
, 数量
descriptionattribute
easyui自定义分页控件、自定义分页控件、ios 自定义分页控件、swiper 自定义分页器、laravel 自定义分页,以便于您获取更多的相关知识。

时间: 2024-11-03 16:27:08

完善自定义分页控件的相关文章

实例分享:自己开发的自定义分页控件

分页|控件 一直以来都觉得分页是麻烦的事情,.NET中虽然有DATAGRID的分页,但用其他形式的列表仍然需要使用到分页,一次一次的写不利于效率及面向对象的方法,用类或用户控件也总觉得怪怪的,用第3方的自己觉得不放心,也不利于自己进行修改,干脆就自己写了一个.  (另外注意:在控件编译时,可以在AssemblyInfo.cs文件中设置控件的标签和名称空间,如:using System.Reflection; using System.Runtime.CompilerServices; using

ASP.NET 自定义分页控件的问题,在线等待高手解答

问题描述 我做了一个自定义的分页控件,page.ascx,调用他的页面为productList.aspx,其中用一个隐藏的控件存储当前页码,分页控件中采用Linkbutton作为翻页的按钮,也就是说采用postBack机制做分页处理,做成形如"上一页123456下一页",这种样式,其中"123456"是动态生成的LINKBUTTON,现在的问题是,我点击翻页之后,将productList.aspx文件中d的隐藏控件值更新,更新完毕之后,我需要调用页面文件中重新绑定数

关于asp.net 自定义分页控件_实用技巧

这几天空学习了下自定义控件,参考了aspnetpager开发了自己的分页控件.相对aspnetpager来说功能是多,但个人感觉他的代码太多. 界面: 使用: <%@ Register assembly="YSM.AspNetPager" namespace="YSM.AspNetPager" tagprefix="cc1" %> 页面注册控件,也可以在web.config中配置 1.ajax之UpdatePanel分页则把控件放到U

asp.net自定义分页控件示例_实用技巧

一..ascx页面 复制代码 代码如下: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Pagination.ascx.cs" Inherits="IOCS.WEB.UserControl.Pagination" %><link href="../Content/Css/Pager.css" rel="s

Winfrom DataGridView分页控件

此文章写的是相当的好.http://www.cnblogs.com/huyong/archive/2010/12/18/1910253.html wuhuacong(伍华聪)): http://www.cnblogs.com/wuhuacong/archive/2011/11/24/2262068.html C# WinForm 技巧一: 自定义分页控件 http://www.cnblogs.com/luomingui/archive/2011/12/31/2308721.html

一个比较通用的分页控件,完整的设计时支持和比较流行的分页模式(提供源码下载)

这是我写的一个分页控件,功能如下: 1.支持设计时支持和两种分页模式,其中综合分页模式的效果如下: 普通分页模式的效果如下: 2.完善的设计时支持,包括自动套用格式和设计时面板设置: 使用方法: 在aspx页面中:复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Cyclone.Custom

UrlPager免费分页控件2.0版发布!放分庆祝!!

问题描述 UrlPager是一个ASP.NETWebForm应用程序中通过url进行分页的分页控件,支持使用url路由来生成自定义的分页url.与AspNetPager不同,UrlPager需.NETFramework3.5sp1或更高版本的支持,且不支持PostBack方式的分页及url重写.UrlPager支持.NETFramework3.5sp1新增的urlrouting(Url路由)功能,使用Url路由功能来生成自定义分页url比url重写更简单.高效,也更方便.UrlPager2.0版

【自然框架】QuickPager分页控件的总体介绍和在线演示

   QuickPager分页控件的特点    两种运行方式:自动运行.手动运行.前者便捷,后者灵活.  多种分页方式:Postback.Postback伪URL.URL.URL重写.Ajax For服务器控件伪URL.  多种分页算法:Max.颠倒Top(优化版).Row_Number.自动适应等.可以应对多种数据库和各种需求.  支持多种数据显示控件:GridView.DataList.Repeater等控件.有DataSource和DataBind()的控件都支持.  不需要存储过程,但是

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

================================ 欢迎转载,但是请注明出处.本文出自博客园 .谢谢合作! ================================   最新版本:V2.0.0.7 .http://www.cnblogs.com/jyk/archive/2008/07/28/1255101.html 下载:http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html   ================