petshop4学习_重构DataList实现分页
详细代码如下,慢慢体会..
using System.Collections;
using System.Collections.Specialized;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomControl
{
/**//// <summary>
/// CustomList 的摘要说明
/// 重构DataList控件
/// </summary>
public class CustomList : DataList
{
//静态常量
protected const string HTML1 = "<table width=100% cellpadding=0 cellspacing=0><tbody><tr><td>";
protected const string HTML2 = "</td></tr><tr><td align=right>";
//protected const string HTML3 = "</td><td align=center class=paging>";
//protected const string HTML5 = "</td><td align=right class=paging>";
protected const string HTML4 = "</td></tr></tbody></table>";
private static readonly Regex RX = new Regex(@"^&page=\d+", RegexOptions.Compiled);
private const string LINK_PREV = "<a href=?page={0}>前一页</a>";
private const string LINK_MORE = "<a href=?page={0}>下一页</a>";
private const string LINK_FIRST = "<a href=?page={0}>首页</a>"; //首页
private const string LINK_LAST = "<a href=?page={0}>尾页</a>"; //尾页
private const string KEY_PAGE = "page";
private const string COMMA = "?";
private const string AMP = "&";
protected string emptyText;
private IList dataSource; //数据源
private int pageSize = 10; //每页大小
private int currentPageIndex; //当前页
private int itemCount; //数据条目总数
/**//// <summary>
/// 指定要绑定的数据源
/// </summary>
override public object DataSource
{
set
{
//This try catch block is to avoid issues with the VS.NET designer
//The designer will try and bind a datasource which does not derive from ILIST
try
{
dataSource = (IList)value;
ItemCount = dataSource.Count;
}
catch
{
dataSource = null;
ItemCount = 0;
}
}
}
/**//// <summary>
/// 每页大小
/// </summary>
public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
}
/**//// <summary>
/// 总页数
/// </summary>
protected int PageCount
{
get { return (ItemCount - 1) / pageSize; }
}
/**//// <summary>
/// 可重载,数据条目总数
/// </summary>
virtual protected int ItemCount
{
get { return itemCount; }
set { itemCount = value; }
}
/**//// <summary>
/// 可重载,当前页码
/// </summary>
virtual public int CurrentPageIndex
{
get { return currentPageIndex; }
set { currentPageIndex = value; }
}
/**//// <summary>
/// 空Text
/// </summary>
public string EmptyText
{
set { emptyText = value; }
}
/**//// <summary>
/// 设置页面,翻页事件
/// </summary>
/// <param name="index"></param>
public void SetPage(int index)
{
OnPageIndexChanged(new DataGridPageChangedEventArgs(null, index));
}
override protected void OnLoad(EventArgs e)
{
if (Visible)
{
string page = Context.Request[KEY_PAGE];
int index = (page != null) ? int.Parse(page) : 0;
SetPage(index);
}
}
/**//// <summary>
/// Overriden method to control how the page is rendered
/// Render提交写入
/// </summary>
/// <param name="writer"></param>
override protected void Render(HtmlTextWriter writer)
{
//Check there is some data attached
if (ItemCount == 0)
{
writer.Write(emptyText);
return;
}
//Mask the query "?"/"&"二个符号
string query = Context.Request.Url.Query.Replace(COMMA, AMP);
//正则表达式替换
query = RX.Replace(query, string.Empty);
// Write out the first part of the control, the table header
writer.Write(HTML1);
// Call the inherited method
base.Render(writer);
// Write out a table row closure
writer.Write(HTML2);
if (currentPageIndex > 0)
writer.Write(string.Format(LINK_FIRST, 0 + query) + " "); //首页
//Determin whether next and previous buttons are required
//Previous button?
if (currentPageIndex > 0)
writer.Write(string.Format(LINK_PREV, (currentPageIndex - 1) + query));
//Close the table data tag
//writer.Write(HTML3);
//当前页/总页数
writer.Write(" " + string.Format("页码:{0}/{1}", currentPageIndex + 1, PageCount + 1) + " ");
//writer.Write(HTML5);
//Next button?
if (currentPageIndex < PageCount)
writer.Write(string.Format(LINK_MORE, (currentPageIndex + 1) + query));
if (currentPageIndex < PageCount)
writer.Write(" " + string.Format(LINK_LAST, PageCount + query)); //尾页
//Close the table
writer.Write(HTML4);
}
override protected void OnDataBinding(EventArgs e)
{
//Work out which items we want to render to the page
int start = CurrentPageIndex * pageSize;
int size = Math.Min(pageSize, ItemCount - start);
IList page = new ArrayList();
//Add the relevant items from the datasource
for (int i = 0; i < size; i++)
page.Add(dataSource[start + i]);
//set the base objects datasource
base.DataSource = page;
base.OnDataBinding(e);
}
/**//// <summary>
/// 翻页事件
/// </summary>
public event DataGridPageChangedEventHandler PageIndexChanged;
/**//// <summary>
/// 可重载,翻页事件处理
/// </summary>
/// <param name="e"></param>
virtual protected void OnPageIndexChanged(DataGridPageChangedEventArgs e)
{
if (PageIndexChanged != null)
PageIndexChanged(this, e);
}
}
}
转载于:https://www.cnblogs.com/sjett/archive/2006/06/20/430834.html
petshop4学习_重构DataList实现分页相关推荐
- mysql分页是物理分页_学习MySQL:什么是分页
mysql分页是物理分页 In this article, I am going to explain that in MySQL, what is pagination and how we can ...
- 使用PagedDataSource给Repeater、DataList增加分页
Repeater和DataList是数据库中常用的数据显示控件,它们和DataGrid相比较因为没有分页等复杂的功能,因此性能高,同时Repeater自定义模板又给我们带来了很大的灵活性.但是Repe ...
- 立可得_第2章_新零售_重构人、货、场
立可得_第2章_新零售_重构人.货.场 文章目录 立可得_第2章_新零售_重构人.货.场 1.智能售货机需求分析 1.1 概念介绍 1.1.1 新零售 1.1.2 O2O 1.1.3 物联网 1.2 ...
- 分页技巧_实现第一个分页功能(回复列表中的分页)
分页技巧_实现第一个分页功能(回复列表中的分页) ======================================== 假设共25条数据,每页显示10条,则共3页 first max - ...
- python ui bs_Guibs的Python学习_列表
Guibs 的 Python学习_列表# 列表# 列表由一系列按特定顺序排列的元素组成, 其中元素和元素之间可以没有任何关系 # 在 Python 中, 用方括号 [] 来表示列表, 并用逗号 , 分 ...
- python学习_循环语句
python学习_循环语句 第1关:斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列. 因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子 ...
- 如何学习页面重构/对页面重构理解
笔者是前端小白一枚,在往前端页面重构方向学习成长中,今天花了一天时间学习相关的文章 在这里集合一些关于重构基础概念和成长建议,希望能对想了解和学习页面重构的同学有所帮助 文章中提到的相关文章均说明链接 ...
- linux系统编程学习_(2)进程控制-- fork函数、exec函数族、回收子进程--孤儿进程僵尸进程、wait函数
linux系统编程学习_(2)进程控制-- fork函数.exec函数族.回收子进程–孤儿进程僵尸进程.wait函数 进程控制 fork()函数 创建一个子进程. pid_t fork(void); ...
- 交通流分析2:《基于公共交通大数据的上海市居民出行时空特征研究_王宇》和《面向交通拥堵预测大数据的神经网络群组快速学习_沈晴》阅读总结
上一篇的地址:https://blog.csdn.net/qq_43012160/article/details/103313749 基于公共交通大数据的上海市居民出行时空特征研究_王宇 这篇论文内容 ...
最新文章
- input placeholder样式
- opengl加载显示3DS模型3DS类型文件
- boost::hana::reverse用法的测试程序
- Docker常用操作命令(一)
- C# Regex类详解
- java system.setproperties_在JAVA中 System.getProperty 和 System.setProperty 方法.
- rhel6.3-64 yum问题
- JAVA生成32位随机字符串工具
- Android 权限清单大全
- 解析AI漫画系统CariGAN:这效果让漫画师颤抖!
- Veket Win7PE Win10PE多启动维护优盘制作
- 从Facebook上市看“社交网站效应”
- 谷歌浏览器屏蔽百度热点搜索
- 切片器可以设置日期格式?_切片器——一个筛选神器
- DSPE-PEG-LTLRWVGLMS(二硬脂酰基磷脂酰乙醇胺-聚乙二醇-肿瘤靶向蛋白);神经胶质瘤归巢肽
- 信息抽取之实体消歧,统一
- 雷军微博拧螺丝,CFO为粉丝数发愁
- 4.3 将千克转换成磅
- 杰理AC632蓝牙芯片ADC
- Android上的RNDIS
热门文章
- fwrite函数的一般调用形式是什么?
- Windows 动态链接库 DLL 浅析
- 群晖 上传 源文件不存在_群晖NAS连接百度网盘报错?原因是这样的
- slf4j注解log报错_SpringBoot自定义日志注解,用于数据库记录操作日志,你用过吗?...
- jsp文件能转换html吗,html怎么转换成jsp
- Pcm设备2M通道,E1的基础知识介绍
- 【渝粤教育】广东开放大学 数据采集技术 形成性考核 (29)
- python将html存为pdf_用Python将HTML转为PDF。
- oracle查询字段有list,java读取oracle表字段信息存到列表(LIST)中
- (2.2)HarmonyOS鸿蒙页面跳转