当前位置: 首页 > 编程日记 > 正文

分页控件 WebPager [ZT]

两个类文件,点这里下载DLL文件>WebPager.dll
1、 WebPager.cs

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

[assembly:TagPrefix("WebPager", "wp")]
namespace Xiaoqiao.Controls.WebPager
{
 public delegate void WebPagerEventHandler(object sender, EventArgs e);
 /// <summary>
 /// WebPager 的摘要说明。
 /// </summary>
 [ DefaultProperty("CurrentPageIndex") ]
 [ ToolboxData("<{0}:WebPagerControl runat=server></{0}:WebPagerControl>") ]
 [ Designer("Xiaoqiao.Controls.WebPager.WebPagerDesigner") ]
 [ ParseChildren(false) ]
 public class WebPagerControl : WebControl,INamingContainer,IPostBackEventHandler
 {
  int m_CurrentPageIndex = 0;
  int m_PageCount = 0;
  int m_PageSize = 1;
  int m_RecordCount = 0;
  int m_NavNums = 10;
  System.Drawing.Color m_CurrentPageNumColor = System.Drawing.Color.Red;
  System.Collections.Specialized.NameValueCollection _aa;

string m_FirstPageText = "|&lt;";
  string m_PrevPageText = "&lt;&lt;";
  string m_NextPageText = "&gt;&gt;";
  string m_LastPageText = "&gt;|";

//定义事件代理
  public event WebPagerEventHandler PageChange;
  public WebPagerControl()
  {
  }
  protected override void Render(System.Web.UI.HtmlTextWriter writer)
  {
   if ( m_PageCount==0 )
   {
    base.Render(writer);
    return;
   }
   int n = m_NavNums;
   int r = m_CurrentPageIndex%n;
   int startIndex = (m_CurrentPageIndex-r)/n * n;
   int endIndex = startIndex + n - 1;

if (endIndex>=m_PageCount)
    endIndex = m_PageCount-1;

if ( m_PageCount==1||m_CurrentPageIndex==0 )
   {
    writer.Write(m_FirstPageText);
    writer.Write("&nbsp;");
    writer.Write(m_PrevPageText);
    writer.Write("&nbsp;");
   }
   else
   {
    writer.AddAttribute(HtmlTextWriterAttribute.Href,"javascript:"+Page.GetPostBackEventReference(this,"0"));
    writer.RenderBeginTag(HtmlTextWriterTag.A);
    writer.Write(m_FirstPageText);
    writer.RenderEndTag();
    writer.Write("&nbsp;");
    writer.AddAttribute(HtmlTextWriterAttribute.Href,"javascript:"+Page.GetPostBackEventReference(this,(m_CurrentPageIndex-1).ToString()));
    writer.RenderBeginTag(HtmlTextWriterTag.A);
    writer.Write(m_PrevPageText);
    writer.RenderEndTag();
    writer.Write("&nbsp;");
   }

for ( int i=startIndex;i<=endIndex;i++ )
   {
    string s = i.ToString();
    if ( m_CurrentPageIndex==i )
    {
     writer.Write("["+(i+1).ToString()+"]");
     writer.Write("&nbsp;");
    }
    else
    {
     writer.AddAttribute(HtmlTextWriterAttribute.Href,"javascript:"+Page.GetPostBackEventReference(this,s));
     writer.RenderBeginTag(HtmlTextWriterTag.A);
     writer.Write("["+(i+1).ToString()+"]");
     writer.RenderEndTag();
     writer.Write("&nbsp;");
    }
   }

if ( m_PageCount==1||m_CurrentPageIndex==(m_PageCount-1) )
   {
    writer.Write(m_NextPageText);
    writer.Write("&nbsp;");
    writer.Write(m_LastPageText);
   }
   else
   {
    writer.AddAttribute(HtmlTextWriterAttribute.Href,"javascript:"+Page.GetPostBackEventReference(this,(m_CurrentPageIndex+1).ToString()));
    writer.RenderBeginTag(HtmlTextWriterTag.A);
    writer.Write(m_NextPageText);
    writer.RenderEndTag();
    writer.Write("&nbsp;");
    writer.AddAttribute(HtmlTextWriterAttribute.Href,"javascript:"+Page.GetPostBackEventReference(this,(m_PageCount-1).ToString()));
    writer.RenderBeginTag(HtmlTextWriterTag.A);
    writer.Write(m_LastPageText);
    writer.RenderEndTag();
   }

string inputId = this.ClientID+"_pagenum";
   writer.AddAttribute(HtmlTextWriterAttribute.Type,"text");
   writer.AddAttribute(HtmlTextWriterAttribute.Size,"3");
   writer.AddAttribute(HtmlTextWriterAttribute.Id,inputId);
   writer.AddAttribute(HtmlTextWriterAttribute.Value,(m_CurrentPageIndex+1).ToString());
   writer.RenderBeginTag(HtmlTextWriterTag.Input);
   writer.RenderEndTag();
   writer.AddAttribute(HtmlTextWriterAttribute.Onclick,"javascript:"+this.ClientID+"_GoToPage();");
   writer.AddAttribute(HtmlTextWriterAttribute.Type,"button");
   writer.AddAttribute(HtmlTextWriterAttribute.Value,"go");
   writer.RenderBeginTag(HtmlTextWriterTag.Input);
   writer.RenderEndTag();

base.Render(writer);
  }

private void OnPageChange(object sender, EventArgs e)
  {
   this.ViewState["CurrentPageIndex"] = m_CurrentPageIndex;
   if (PageChange != null)
    PageChange(sender,e);
  }

protected override void OnLoad(EventArgs e)
  {
   object state;

state = this.ViewState["CurrentPageIndex"];
   if (state != null)
    m_CurrentPageIndex = Convert.ToInt32(state);

state = this.ViewState["RecordCount"];
   if (state != null)
    this.RecordCount = Convert.ToInt32(state);

string inputId = this.ClientID+"_pagenum";
   string scriptKey = "webpager_script";
   if ( !Page.IsClientScriptBlockRegistered(scriptKey) )
   {
    string script = "<script language=javascript>function "+this.ClientID+"_GoToPage(){";
    script += "var gotoPage=parseInt(document.getElementById('"+inputId+"').value);";
    script += "if (isNaN(gotoPage)){alert('请输入正确的页码');return;}";
    script += "if ( gotoPage>"+m_PageCount+"||gotoPage<1 ){alert('页码超出范围');return;}gotoPage--;";
    script += "__doPostBack('"+this.ClientID+"',gotoPage)"+";";//Page.GetPostBackEventReference(this,"gotoPage")+";";
    script += "}</script>";
    Page.RegisterClientScriptBlock(scriptKey,script);
   }

base.OnLoad(e);
  }


  public int CurrentPageIndex
  {
   get { return m_CurrentPageIndex; }
   set { m_CurrentPageIndex = value; }
  }
  public int RecordCount
  {
   get
   {
    return m_RecordCount;
   }
   set
   {
    int i = value;
    this.ViewState["RecordCount"] = i;
    m_PageCount = GetPages(i,m_PageSize);
    m_RecordCount = i;
   }
  }
  public int PageSize
  {
   get
   {
    return m_PageSize;
   }
   set
   {
    int i = value;
    if (i>0)
    {
     m_PageCount = GetPages(m_RecordCount,i);
     m_PageSize = i;
    }
    else
     throw(new Exception("PageSize必须大于零"));
   }
  }
  private int GetPages(int Total,int PageSize)
  {
   int i = Total;
   int t;
   if ( (i%PageSize)==0 )
    t = i/PageSize;
   else
    t = (int)(i-i%PageSize)/PageSize+1;
   return t;
  }

public int NavNums
  {
   get
   {
    return m_NavNums;
   }
   set
   {
    int i = value;
    if (i>0)
     m_NavNums = value;
   }
  }
  public string FirstPageText
  {
   get
   {
    return m_FirstPageText;
   }
   set
   {
    m_FirstPageText = value;
   }
  }
  public string PrevPageText
  {
   get
   {
    return m_PrevPageText;
   }
   set
   {
    m_PrevPageText = value;
   }
  }
  public string NextPageText
  {
   get
   {
    return m_NextPageText;
   }
   set
   {
    m_NextPageText = value;
   }
  }
  public string LastPageText
  {
   get
   {
    return m_LastPageText;
   }
   set
   {
    m_LastPageText = value;
   }
  }
  public System.Drawing.Color CurrentPageNumColor
  {
   get
   {
    return m_CurrentPageNumColor;
   }
   set
   {
    m_CurrentPageNumColor = value;
   }
  }

public System.Collections.Specialized.NameValueCollection aa
  {
   get { return _aa; }
   set { _aa = value; }
  }

#region IPostBackEventHandler 成员

public void RaisePostBackEvent(string eventArgument)
  {
   // TODO:  添加 WebPagerControl.RaisePostBackEvent 实现
   CurrentPageIndex = int.Parse(eventArgument);
   OnPageChange(this,null);
  }

#endregion
 }
}

2、WebPagerDesigner.cs

using System;
using System.Globalization;

namespace Xiaoqiao.Controls.WebPager
{
 /// <summary>
 /// WebPagerDesigner 的摘要说明。
 /// </summary>
 public class WebPagerDesigner : System.Web.UI.Design.ControlDesigner
 {
  public WebPagerDesigner()
  {
  }
  public override string GetDesignTimeHtml()
  {
   WebPagerControl oControl = (WebPagerControl)Component ;
   return String.Format( CultureInfo.InvariantCulture,
    "<table width=\"{0}\" height=\"{1}\" bgcolor=\"#f5f5f5\" bordercolor=\"#c7c7c7\" cellpadding=\"0\" cellspacing=\"0\" border=\"1\"><tr><td valign=\"middle\" align=\"center\">WebPagerControl - <b>{2}</b></td></tr></table>",
    oControl.Width,
    oControl.Height,
    oControl.ID ) ;
  }
 }
}

转载于:https://www.cnblogs.com/RobotTech/archive/2007/10/25/937123.html

相关文章:

typedef interrupt void (*PINT)(void)的分析

今天写程序时&#xff0c;在DSP2833x_PieVect.h看到typedef interrupt void (*PINT)(void)突然一愣&#xff0c;上网查了下发现在这是加了interrupt 中断关键字的函数指针&#xff0c;顺便记一下并复习一下函数指针。 本文参照下面的博客整理而来 http://blog.csdn.net/lg2lh/a…

webpack打开项目命令_配置webpack中dev.env.js、prod.env.js,解决不同命令下项目启动和打包到指定的环境...

前后端分离的项目开发中&#xff0c;我们有开发环境、测试环境、预生产环境和生产环境。1、开发环境下调试接口的时候&#xff0c;一般都会有好几个接口地址(开发服务器上的&#xff0c;本地的&#xff0c;接口开发人员的&#xff0c;七七八八的接口地址)&#xff0c;要根据情况…

倒计时2天,如何搭乘通往AI全明星技术盛宴的末班车?(附大会完整版全日程)...

在操作系统、芯片领域跌倒的中国程序员&#xff0c;如何崛起&#xff1f;| 畅言GitHub服务中断24小时11分钟事故分析报告大咖指路&#xff1a;机器学习人才这些方向最紧缺&#xff01;以太坊2.0? 亲历3天的Devcon我看到了这样一个以太坊 | 见闻录土味纪实文学 | 四十五度角仰望…

ASP.NET Web页面(.aspx)添加用户控件(.ascx)无显示的问题

写好的用户控件点击视图显示没有问题&#xff0c;但是将控件添加到Web窗体上时却显示如下图标:F5运行&#xff0c;查看源代码:有代码——但是页面却显示一片空白。分析代码&#xff0c;比较了一下能显示用户控件的其他web页面以及代码,发现只有如下代码不同:<script languag…

AI芯片的“战国时代”:计算力将会驶向何方?

CSDN 出品的《2018-2019 中国人工智能产业路线图》V2.0 版即将重磅面世&#xff01;V1.0 版发布以来&#xff0c;我们有幸得到了诸多读者朋友及行业专家的鼎力支持&#xff0c;在此表示由衷感谢。此次 V2.0 版路线图将进行新一轮大升级&#xff0c;内容包括 3 大 AI 前沿产业趋…

python 累积正态分布函数_为什么机器学习都围绕正态分布进行讨论?

作者 | Farhad Malik译者 | Monanfei责编 | 夕颜出品 | AI科技大本营(ID: rgznai100)为什么正态分布如此特殊&#xff1f;为什么大量数据科学和机器学习的文章都围绕正态分布进行讨论&#xff1f;我决定写一篇文章&#xff0c;用一种简单易懂的方式来介绍正态分布。在机器学习的…

Silverlight开发中遇到的几个小问题

1&#xff0c;程序发布时遇到错误&#xff1a; "Could not load type System.ServiceModel.Activation.HttpModule from assembly System.ServiceModel, Version3.0.0.0, Cultureneutral, PublicKeyTokenb77a5c561934e089" 可能引发此问题的原因&#xff1a; 安装.N…

最新DynamipsGUI2.8[模拟器]发布!(中文版-英文版下载)

DynamipsGUI2.8发布!2.0beta新增功能1.支持分布式Dynamips&#xff0c;最多支持9台PC联合进行路由交换模拟(可能存在问题,请测试提出问题)2.设备支持数量增加至路由器44台,交换机44台,适应超大型环境模拟3.支持2691,3725,3745(可能存在问题,请测试提出问题)4.集成最新dynamips-…

ue4 函数和宏区别_【UE4】通俗易懂 用蓝图来学习 C++ 基础知识

【前言】&#xff1a;用老罗来学UE蓝图&#xff1a;https://zhuanlan.zhihu.com/p/135297007​zhuanlan.zhihu.com再开个脑洞&#xff0c;用蓝图来类比学习C基础知识。C 刚开始学&#xff0c;所以本篇知识点不是特别全有些地方也可能不是特别准&#xff0c;望谅解&#xff0c;以…

c#自动登录网页,浏览页面

需求&#xff1a;客户的数据同时存在在另外一个不可控的系统中&#xff0c;需要和当前系统同步。 思路&#xff1a;自动登录另外一个系统&#xff0c;然后抓取数据&#xff0c;同步到本系统中。 技术点&#xff1a;模拟用户登录&#xff1b;保存登录状态&#xff1b;抓取数据 程…

用Servlet获取表单数据

1 //accept.jsp2 package servlets;3 4 import java.io.*;5 import javax.servlet.*;6 import javax.servlet.http.*;7 public class accept extends HttpServlet8 { 9 public String codeToString(String str) 10 {//处理中文字符串的函数 11 String sstr; 12 …

品质检测破局:工业视觉检测云平台为智能制造“点睛”

微波炉角落里的型号编码、空调背面不显眼的小螺钉、冰箱侧身的标签&#xff0c;它们的质量检测是生产线中最费人工的地方&#xff0c;也是制约智能制造的老大难。如果哪天这类瑕疵检测不再需要人工&#xff0c;这样的制造就真的称得上智能。最近&#xff0c;这一难题被美的和英…

算法导论Java实现-构建MaxHeap

package lhz.algorithm.chapter.six; /** * “构建堆”&#xff0c;《算法导论》6.3章节 Building a heap * 利用之前实现的<code>MaxHeapify</code>算法&#xff0c;构建max-heap。 * 伪代码&#xff1a; * BUILD-MAX-HEAP(A) * 1 heap-size[A] ← length[A]…

哲学家就餐问题c语言_哲学家就餐问题的一种Python解决方案

哲学家就餐问题一直是多线程同步问题的经典案例&#xff0c;本文中展示了多线程竞争共享资源带来的死锁问题&#xff0c;并介绍了一种简单的解决方案。哲学家就餐问题哲学家最擅长的就是思考和吃饭 &#xff0c;当他们感觉累的时候&#xff0c;就会拿起一双筷子去吃盘子里的寿司…

倒计时1天,2018 AI开发者报名通道即将关闭(附参会提醒)

参加 2018 AI开发者大会&#xff0c;请点击 ↑↑↑随着 AI 逐渐转为各大科技巨头的战略主战场&#xff0c;人工智能技术亦是长立风口&#xff0c;向阳而生。越来越多的发展趋势表明&#xff0c;未来的人工智能将逐步迈入广泛普及阶段&#xff0c;继而深入影响人类日常的生产生活…

Linux安全检查方法

检查系统密码文件,查看文件修改日期 [rootfedora ~]# ls -l /etc/passwd 查看passwd文件中有哪些特权用户 [rootfedora ~]# awk -F: $30 {print $1} /etc/passwd 查看系统里有没有空口令帐户 awk -F: length($2)0 {print $1} /etc/shadow 检查系…

Ubuntu Server 12.04下cobbler + dnsmasq +tftpd-hpa的安装配置(四)

四、自定义 kickstart 文件 Kickstart最早是RedHat公司用来自动部署RedHat操作系统的&#xff0c;通过Kickstart配置文件&#xff0c;通常安装过程中需要交互输入的信息就都可以自动应答。 通过Kickstart安装操作系统一般是这样几个步骤&#xff1a; Create a kickstart file. …

AI 技术实力图谱全解析!2018 中国 AI 开发者大会重磅来袭

【2018 AI 开发者大会图文直播】 11 月 8 日&#xff0c;由中国专业 IT 社区 CSDN 与硅谷 AI 社区 AICamp 联合出品的 2018 中国 AI 开发者大会&#xff08;AI NEXTCon&#xff09; 在北京拉开帷幕&#xff0c;近百位中美顶尖 AI 专家、知名企业代表、逾千名 AI 开发者&#x…

sql的不等于条件优化_SQL优化案例(2):OR条件优化

随后上一篇文章《 SQL优化案例(1)&#xff1a;隐式转换》的介绍&#xff0c;此处内容围绕OR的优化展开。在MySQL中&#xff0c;同样的查询条件&#xff0c;如果变换OR在SQL语句中的位置&#xff0c;那么查询的结果也会有差异&#xff0c;在多个复杂的情况下&#xff0c;可能会带…

所有 SAP 现在开设的标准课程

下面是 SAP 中国的教育培训首页&#xff0c;里面有 SAP 最新最完整的培训教育计划。 http://www30.sap.com/china/services/education/index.epx 从中可以看出&#xff0c;随着 SAP 的发展&#xff0c;BC4xx 系列课程已经发生了很大改变&#xff0c;取消了 BC404、BC406&#x…

动态展开所有_库存与市场需求之间如何“动态”共舞?库存计划动态模型构建分享...

库存(Stock)是用来提高交货速度、缓冲需求到单高峰的常用手段&#xff0c;通过按库存生产(MTS)的方法&#xff0c;用储备库存来满足客户需求、并按一定规则补货&#xff0c;无需等待生产周期&#xff0c;可极快地交付。相比按订单生产(MTO)的模式&#xff0c;采用安全库存可以有…

Linux下DNS简单部署(主从域名服务器)

一、DNS简介 DNS&#xff08;Domain Name System&#xff09;&#xff0c;域名系统&#xff0c;因特网上作为域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使用户更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。通过主机名&#xff0c;最终…

Neurala与CSDN宣布战略合作,将一站式AI平台BrainBuilder带给中国开发者

11 月 8 日&#xff0c;美国人工智能创新企业 Neurala 与中国开发者社区 CSDN 联合宣布&#xff0c;正式成为战略合作伙伴&#xff0c;通过双方的合作&#xff0c;将 BrainBuilder 平台提供给中国的更多开发者和教育培训机构。Brain Builder 是 Neurala 开发的一站式 AI 平台。…

使用idea创建springboot项目并打成war包发布到weblogic上...

部署tomcat也是类似的&#xff0c;但是需要注意项目配置的路径&#xff0c;或者直接将项目放到webapp的ROOT目录下。 使用工具&#xff1a;intelliJ IDEA2016.3&#xff0c; jdk1.8 &#xff0c;weblogic12 一 使用idea创建springboot项目 File-》New -》Project 选择jdk版本…

cs架构嵌入bs_CS与BS架构区别、比较、及现状与趋势分析

一、简介 CS即Client/Server(客户机/服务器)结构&#xff0c;C/S结构在技术上很成熟&#xff0c;它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。但是该结构的程序是针对性开发&#xff0c;变更不够灵活&#xff0c;维护和管理的难…

大数据的“平民化”、“流动化”、“商业化”推动企业升级与转型

CSDN 出品的《2018-2019 中国人工智能产业路线图》V2.0 版已经重磅面世&#xff01; V1.0 版发布以来&#xff0c;我们有幸得到了诸多读者朋友及行业专家的鼎力支持&#xff0c;在此表示由衷感谢。此次 V2.0 版路线图进行了新一轮大升级&#xff0c;内容包括 3 大 AI 前沿产业趋…

APIPA是什么?

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />APIPA&#xff08;Automatic Private IP Addressing&#xff0c;自动专用IP寻址自动专用IP寻址&#xff09;&#xff0c;是一个DHCP故障转移机制。当DHCP服务器出故障时&#xff…

birt报表表格边框_手把手教你五步制作出一张领导驾驶舱报表

领导驾驶舱报表是一款为企业内部领导及相关高管提供企业数据指标分析的报表&#xff0c;用来实时反映企业的运行状况&#xff0c;将企业管理决策提升到一个新的高度。今天小编用亿信华辰的亿信ABI给大家实际演示&#xff0c;通过5个步骤就可以刷刷刷“变”出漂亮的领导驾驶舱&a…

Web的现状:网页性能提升指南

互联网发展非常迅速&#xff0c;所以我们创造了Web平台。通常 我们会忽视连通性等问题&#xff0c;但用户们却不会视而不见 。一瞥万维网的现状&#xff0c;可以发现我们并没有用同情心、变通意识去构建它&#xff0c;更不要说性能了。 所以&#xff0c;今天的Web是什么状态呢?…

[导入]ExtJs 2.0 弹窗事例

网站: JavaEye 作者: ppkosd 链接&#xff1a;http://ppkosd.javaeye.com/blog/133004 发表时间: 2007年10月18日 责任不是你应该做的事情,而是你必须做的事情 -- ppkosd 这个EXT 2.0 的例子 讲的是怎么样用aspserver和ext2.0构建弹窗效果! 服务器部分&#xff1a; 代码va…