using System.ComponentModel;
using System.Web.UI;
[assembly: TagPrefix("Jinlong.Control", "Jinlong")]
namespace Jinlong.Control
{
/// <summary>
/// JRepeater控件
/// Create by Jinlong Zhang
/// </summary> [DefaultProperty("Text"), ToolboxData("<!--Repeater Begin --><div class=\"BigDiv_rep\"> <{0}:Repeater ID=\"Rep_List\" runat=server EnableViewState=\"false\" OnPreRender=\"Rep_List_PreRender\"> <HeaderTemplate><div class=\"BigDiv_Title_rep\"> <ul> <li style=\"line-height:22px;\"> <asp:CheckBox ID=\"TopCheckBox\" runat=\"server\" Text=\"ID\" EnableViewState=\"false\"/> </li><li style=\"width:10%;\"> </li> </ul> </div> </HeaderTemplate><ItemTemplate><div class=\"BigDiv_line_rep\" onmouseover=\"javascript:this.style.backgroundColor='#EEF8F9'\" onmouseout=\"javascript:this.style.backgroundColor='#FFFFFF'\"><ul ><li style=\"line-height:22px;\"><asp:CheckBox ID=\"ItemCheckBox\" runat=\"server\" Text='<%# Eval(\"ID\") %>' EnableViewState=\"false\"/></li><li style=\"width:10%;\"></li></ul></div></ItemTemplate> <FooterTemplate><div class=\"DelAllButton\"><asp:Button ID=\"btn_DelAll\" runat=\"server\" onclick=\"btn_DelAll_Click\" CssClass=\"btn_DelAllCss\" Text=\"删除\" EnableViewState=\"false\"/></div></FooterTemplate></{0}:Repeater></div><!--Repeater End -->")]
public class Repeater : System.Web.UI.WebControls.Repeater
{
private int _recordcount = 0;
private int _pagesize = 0;
private string _pagelink = "";
private int _currentpage = 1;
/// <summary>
/// 构造函数
/// </summary>
public Repeater()
{ } #region __________属性__________ [Bindable(true), Category("Data"), DefaultValue("1"), Description("记录总数")]
public int RecordCount
{
get
{
return _recordcount;
} set
{
_recordcount = value;
}
} [Bindable(true), Category("Data"), DefaultValue("1"), Description("每页显示记录数")]
public int PageSize
{
get
{
return _pagesize;
} set
{
_pagesize = value;
}
} [Bindable(true), Category("Data"), DefaultValue(""), Description("当前页链接")]
public string PageLink
{
get
{
return _pagelink;
} set
{
_pagelink = value;
}
} [Bindable(true), Category("Data"), DefaultValue("1"), Description("当前页")]
public int CurrentPage
{
get
{
return _currentpage;
} set
{
_currentpage = value;
}
} #endregion /// <summary>
/// 输出html,在浏览器中显示控件
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
base.Render(output); output.WriteLine("<div class=\"PageLink\">" + Pagination(_recordcount, _pagesize, _currentpage, _pagelink) + "</div>");
} /// <summary>
/// 分页函数
/// </summary>
/// <param name="recordcount">总记录数</param>
/// <param name="pagesize">每页记录数</param>
/// <param name="currentpage">当前页数</param>
/// <param name="url">Url参数</param>
/// <returns></returns>
public string Pagination(int recordcount, int pagesize, int currentpage, string url)
{
int allcurrentpage = 0;
int next = 0;
int pre = 0;
int startcount = 0;
int endcount = 0;
string currentpagestr = ""; if (currentpage < 1) { currentpage = 1; }
//计算总页数
if (pagesize != 0)
{
allcurrentpage = (recordcount / pagesize);
allcurrentpage = ((recordcount % pagesize) != 0 ? allcurrentpage + 1 : allcurrentpage);
allcurrentpage = (allcurrentpage == 0 ? 1 : allcurrentpage);
}
next = currentpage + 1;
pre = currentpage - 1;
startcount = (currentpage + 5) > allcurrentpage ? allcurrentpage - 9 : currentpage - 4;//中间页起始序号
//中间页终止序号
endcount = currentpage < 5 ? 10 : currentpage + 5;
if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
if (allcurrentpage < endcount) { endcount = allcurrentpage; }//页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
currentpagestr = "共" + allcurrentpage + "页      "; currentpagestr += currentpage > 1 ? "<a href=\"" + url + "?page=1\">首页</a>  <a href=\"" + url + "?page=" + pre + "\">上一页</a>" : "首页 上一页";
//中间页处理,这个增加时间复杂度,减小空间复杂度
for (int i = startcount; i <= endcount; i++)
{
currentpagestr += currentpage == i ? "  <font color=\"#ff0000\">" + i + "</font>" : "  <a href=\"" + url + "?page=" + i + "\">" + i + "</a>";
}
currentpagestr += currentpage != allcurrentpage ? "  <a href=\"" + url + "?page=" + next + "\">下一页</a>  <a href=\"" + url + "?page=" + allcurrentpage + "\">末页</a>" : " 下一页 末页";
return currentpagestr;
} }
}

  

自定义控件之万能Repeater源码的更多相关文章

  1. android 自定义控件之下拉刷新源码详解

    下拉刷新 是请求网络数据中经常会用的一种功能. 实现步骤如下: 1.新建项目   PullToRefreshDemo,定义下拉显示的头部布局pull_to_refresh_refresh.xml &l ...

  2. WPF自定义控件与样式(15)-终结篇 & 系列文章索引 & 源码共享

    系列文章目录  WPF自定义控件与样式(1)-矢量字体图标(iconfont) WPF自定义控件与样式(2)-自定义按钮FButton WPF自定义控件与样式(3)-TextBox & Ric ...

  3. android 自定义控件 使用declare-styleable进行配置属性(源码角度)

          android自定义styleableattrs源码 最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的配置属性进行配置,于是便查询了解了下declare-styleabl ...

  4. 【转】android 自定义控件 使用declare-styleable进行配置属性(源码角度)

    原文网址:http://blog.csdn.net/vipzjyno1/article/details/23696537 最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的配置属性进行 ...

  5. Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码

    Android项目开发中经常会遇见需要实现圆角或者圆形的图片功能,如果仅仅使用系统自带的ImageView控件显然无法实现此功能,所以通过系列文章的形式由简到繁全方位的介绍一下此功能的实现,巩固一下自 ...

  6. Qt自定义控件大全+designer源码

    抽空将自定义控件的主界面全部重写了一遍,采用左侧树状节点导航,看起来更精美高大上一点,后期准备单独做个工具专用每个控件的属性设计,其实qt自带的designer就具备这些功能,于是从qt4的源码中抽取 ...

  7. [学习总结]8、android 自定义控件 使用declare-styleable进行配置属性(源码角度)

    declare-styleable:declare-styleable是给自定义控件添加自定义属性用的. 官方的相关内部控件的配置属性文档:http://developer.android.com/r ...

  8. C#使用Xamarin开发可移植移动应用进阶篇(6.使用渲染器针对单个平台自定义控件..很很很很重要..),附源码

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 本篇..基 ...

  9. 转--2014年最新810多套android源码2.46GB免费一次性打包下载

    转载自:http://www.eoeandroid.com/thread-497046-1-1.html 感谢该博客主人无私奉献~~ 下面的源码是从今年3月份开始不断整理源码区和其他网站上的安卓例子源 ...

随机推荐

  1. Step Detector and Step Counter Sensors on Android

    Step Detector and Step Counter Sensors on Android 时间 2014-03-31 11:56:00 Tech Droid 原文  http://techd ...

  2. javascript游戏引擎

    基于JavaScript开发的游戏是唯一一个能够跨桌面,Web和移动三种平台的.今天,本文向大家推荐一些非常棒的JavaScript游戏开发框架. AD:干货来了,不要等!WOT2015 北京站演讲P ...

  3. Java 集合系列之 Vector详细介绍(源码解析)和使用示例

    Vector简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口. Vector 继承 ...

  4. 一幅图秒懂LoadAverage(负载)

    转自:http://www.habadog.com/2015/02/27/what-is-load-average/ 一幅图秒懂LoadAverage(负载)   一.什么是Load Average? ...

  5. 在MFC内竟然不可以解析“Mat”

    调试了好久,在MFC内竟然不可以解析“Mat” 总是显示"Mat"没有定义,改动include.lib.依赖库, 不断地改动: #include "opencv2/img ...

  6. 在Redhat 7.3中采用离线方式安装Docker

    本文环境 Redhat Linux 7.3.Docker 18. 写在前面 Docker CE默认是不支持Redhat的,如果你想在Redhat安装,可以使用静态二进制包.这是我多次尝试RPM后得出的 ...

  7. 内存数据库-H2简介与实践

    一.H2数据库介绍 H2数据库地址:http://www.h2database.com/html/main.html H2是一个开源的嵌入式(非嵌入式设备)数据库引擎,它是一个用Java开发的类库,可 ...

  8. 关于SqlBulkCopy SQL批量导入需要注意,列名是区分大小写的

    最近在做数据从Excel批量导入MSSQL时,传统的是使用Insert Into Table方法,不过这个方便比较慢 通过使用 SqlBulkCopy 可以批量导入到数据库. 默认批量导入数据库,需要 ...

  9. Netty Associated -- Channel

    A nexus to a network socket or a component which is capable of I/O operations such as read, write, c ...

  10. Verilog 加法器和减法器(4)

    类似于行波进位加法器,用串联的方法也能够实现多位二进制数的减法操作.  比如下图是4位二进制减法逻辑电路图. 8位二进制减法的verilog代码如下: module subn(x, y, d,cin) ...