petshop4学习_重构DataList实现分页

掌握要点: <IList>,DataGrid翻页事件...
详细代码如下,慢慢体会..
None.gifusing System;
None.gif
using System.Collections;
None.gif
using System.Collections.Specialized;
None.gif
using System.Text;
None.gif
using System.Text.RegularExpressions;
None.gif
using System.Web.UI;
None.gif
using System.Web.UI.WebControls;
None.gif
None.gif
namespace CustomControl
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
InBlock.gif    
/// CustomList 的摘要说明
InBlock.gif    
/// 重构DataList控件
ExpandedSubBlockEnd.gif    
/// </summary>

InBlock.gif    public class CustomList : DataList
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
//静态常量
InBlock.gif
        protected const string HTML1 = "<table width=100% cellpadding=0 cellspacing=0><tbody><tr><td>";
InBlock.gif        
protected const string HTML2 = "</td></tr><tr><td align=right>";
InBlock.gif        
//protected const string HTML3 = "</td><td align=center class=paging>";
InBlock.gif
InBlock.gif        
//protected const string HTML5 = "</td><td align=right class=paging>";
InBlock.gif

InBlock.gif        
protected const string HTML4 = "</td></tr></tbody></table>";
InBlock.gif
InBlock.gif        
private static readonly Regex RX = new Regex(@"^&page=\d+", RegexOptions.Compiled);
InBlock.gif        
private const string LINK_PREV = "<a href=?page={0}>前一页</a>";
InBlock.gif        
private const string LINK_MORE = "<a href=?page={0}>下一页</a>";
InBlock.gif        
private const string LINK_FIRST = "<a href=?page={0}>首页</a>";     //首页
InBlock.gif
        private const string LINK_LAST = "<a href=?page={0}>尾页</a>";      //尾页
InBlock.gif
        private const string KEY_PAGE = "page";
InBlock.gif        
private const string COMMA = "?";
InBlock.gif        
private const string AMP = "&";
InBlock.gif
InBlock.gif        
protected string emptyText;
InBlock.gif        
private IList dataSource;       //数据源
InBlock.gif
        private int pageSize = 10;      //每页大小
InBlock.gif
        private int currentPageIndex;   //当前页
InBlock.gif
        private int itemCount;          //数据条目总数
InBlock.gif

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 指定要绑定的数据源
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        override public object DataSource
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
set
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
//This try catch block is to avoid issues with the VS.NET designer
InBlock.gif                
//The designer will try and bind a datasource which does not derive from ILIST
InBlock.gif
                try
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    dataSource 
= (IList)value;
InBlock.gif                    ItemCount 
= dataSource.Count;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
catch
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    dataSource 
= null;
InBlock.gif                    ItemCount 
= 0;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 每页大小
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public int PageSize
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn pageSize; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gif{ pageSize = value; }
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 总页数
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        protected int PageCount
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn (ItemCount - 1/ pageSize; }
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 可重载,数据条目总数
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        virtual protected int ItemCount
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn itemCount; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gif{ itemCount = value; }
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 可重载,当前页码
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        virtual public int CurrentPageIndex
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn currentPageIndex; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gif{ currentPageIndex = value; }
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 空Text
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public string EmptyText
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gif{ emptyText = value; }
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 设置页面,翻页事件
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
/// <param name="index"></param>

InBlock.gif        public void SetPage(int index)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            OnPageIndexChanged(
new DataGridPageChangedEventArgs(null, index));
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
override protected void OnLoad(EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if (Visible)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
string page = Context.Request[KEY_PAGE];
InBlock.gif                
int index = (page != null? int.Parse(page) : 0;
InBlock.gif                SetPage(index);
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// Overriden method to control how the page is rendered
InBlock.gif        
/// Render提交写入
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
/// <param name="writer"></param>

InBlock.gif        override protected void Render(HtmlTextWriter writer)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
InBlock.gif            
//Check there is some data attached
InBlock.gif
            if (ItemCount == 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                writer.Write(emptyText);
InBlock.gif                
return;
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            
//Mask the query "?"/"&"二个符号
InBlock.gif
            string query = Context.Request.Url.Query.Replace(COMMA, AMP);
InBlock.gif            
//正则表达式替换
InBlock.gif
            query = RX.Replace(query, string.Empty);
InBlock.gif
InBlock.gif
InBlock.gif            
// Write out the first part of the control, the table header
InBlock.gif
            writer.Write(HTML1);
InBlock.gif
InBlock.gif            
// Call the inherited method
InBlock.gif
            base.Render(writer);
InBlock.gif
InBlock.gif            
// Write out a table row closure
InBlock.gif
            writer.Write(HTML2);
InBlock.gif
InBlock.gif            
if (currentPageIndex > 0)
InBlock.gif            writer.Write(
string.Format(LINK_FIRST, 0 + query) + "&nbsp;");     //首页
InBlock.gif            
//Determin whether next and previous buttons are required
InBlock.gif            
//Previous button?
InBlock.gif
            if (currentPageIndex > 0)
InBlock.gif                writer.Write(
string.Format(LINK_PREV, (currentPageIndex - 1+ query));
InBlock.gif
InBlock.gif            
//Close the table data tag
InBlock.gif            
//writer.Write(HTML3);
InBlock.gif
InBlock.gif            
//当前页/总页数
InBlock.gif
            writer.Write("&nbsp;&nbsp;" + string.Format("页码:{0}/{1}", currentPageIndex + 1, PageCount + 1+ "&nbsp;&nbsp;");
InBlock.gif
InBlock.gif            
//writer.Write(HTML5);
InBlock.gif
InBlock.gif            
//Next button?
InBlock.gif
            if (currentPageIndex < PageCount)
InBlock.gif                writer.Write(
string.Format(LINK_MORE, (currentPageIndex + 1+ query));
InBlock.gif            
if (currentPageIndex < PageCount)
InBlock.gif            writer.Write(
"&nbsp;" + string.Format(LINK_LAST, PageCount + query));      //尾页
InBlock.gif
InBlock.gif            
//Close the table
InBlock.gif
            writer.Write(HTML4);
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
override protected void OnDataBinding(EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
InBlock.gif            
//Work out which items we want to render to the page
InBlock.gif
            int start = CurrentPageIndex * pageSize;
InBlock.gif            
int size = Math.Min(pageSize, ItemCount - start);
InBlock.gif
InBlock.gif            IList page 
= new ArrayList();
InBlock.gif
InBlock.gif            
//Add the relevant items from the datasource
InBlock.gif
            for (int i = 0; i < size; i++)
InBlock.gif                page.Add(dataSource[start 
+ i]);
InBlock.gif
InBlock.gif            
//set the base objects datasource
InBlock.gif
            base.DataSource = page;
InBlock.gif            
base.OnDataBinding(e);
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 翻页事件
ExpandedSubBlockEnd.gif        
/// </summary>

InBlock.gif        public event DataGridPageChangedEventHandler PageIndexChanged;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
InBlock.gif        
/// 可重载,翻页事件处理
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
/// <param name="e"></param>

InBlock.gif        virtual protected void OnPageIndexChanged(DataGridPageChangedEventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if (PageIndexChanged != null)
InBlock.gif                PageIndexChanged(
this, e);
ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}

转载于:https://www.cnblogs.com/sjett/archive/2006/06/20/430834.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何与Java 8,NetBeans Platform 8,Jenkins,Jacoco和Sonar进行持续集成

介绍 Java 8出现了&#xff0c;人们所期待的革命终于发布了&#xff0c;我敢肯定&#xff0c;你们中的许多人都在想着同样的问题“我应该在项目中使用它吗&#xff1f;”。 好吧&#xff0c;几个月来我遇到了同样的问题&#xff0c;今天我有一个答案想与大家分享。 很多方面都…

WSS学习(一)---简单部署图

研究了一段时间的WSS&#xff0c;终于找到点头绪了今天把这段时间的思路整理了一下&#xff0c;结果发现就是这么一张图也不知道研究的对不对&#xff0c;有高手发现不对的给点指点有也在研究的大家一起讨论一下简单说明&#xff1a;数据库用SQL2005&#xff0c;报表用SQL2005的…

Wildfly 8.0通过其JAXRS 2.0实现提供了无缝的JSON支持。

很高兴看到Wildfly 8.0使得使用同一组JAXB类中的XML和JSON表示 两者变得更加容易&#xff0c;而无需任何额外的检查或配置不同的JAXB运行时实现。 您需要做的就是 只需从JAXRS资源类中的业务方法中返回JAXB对象 将HTTP Accept标头设置为application / json 返回JAXB类的简单…

vue.config.js配置别名alias、配置生产环境清除console

项目中使用引入文件有时候路径比较深&#xff0c;需要使用"../../../xx.js"这种类似的路劲引入&#xff0c;这种方式比较笨&#xff0c;可以使用webpack的别名alias配置来解决。 首先&#xff0c;先确定项目中是否有path模块&#xff1a; 如果没有path模块需要先安装…

借助Java 8和lambdas,可以一起使用AssertJ和Awaitility

AssertJ和Awaitility是在自动代码测试中使用的两个我最喜欢的工具。 不幸的是直到最近&#xff0c;还不能一起使用它。 但是随后Java 8进入了游戏&#xff0c;几十行代码足以使其在Awaility 1.6.0中实现。 AssertJ提供了一组丰富的断言&#xff0c;其中包含非常有用的错误消息…

小程序-冒泡事件

小程序冒泡事件与非冒泡事件 会随之触发父元素的称为冒泡事件&#xff0c;反之&#xff0c;则是非冒泡事件 wxml&#xff1a; <view class"view1" bindtap"view1click"> <!-- 用 bind 绑定事件 -->view1<view class"view2" bin…

mysql导出表结构 创建_mysql如何导出表结构为文本文件

Log Goup ID&#xff0c;可能会配置多个redo组&#xff0c;每个组对应一个id&#xff0c;当前都是0&#xff0c;占用4字节Start LSN&#xff0c;这个redo log文件开始日志的lsn&#xff0c;占用8字节Log File Number&#xff0c;总是为0&#xff0c;占用4字节Created By&#x…

CSS基础学习-15-1.CSS 浏览器内核

转载于:https://www.cnblogs.com/songsongblue/p/11047935.html

gitlab提交代码push,触发jenkins构建

一、安装插件 Build Authorization TokenRoot Gitlab Hook Plugin二、配置 在linux上执行命令 openssl rand -hex 12获得token&#xff1a; 632f873225efdb5b7e5da411 去掉jenkins的 CSRF Protection设置 找到触发构建的项目&#xff0c;修改触发器 在gitlab的项目中&#xff0…

5分钟搞定jQuery zepto.js 面向对象插件

今天分享一下快速使用jQuery zepto.js的技巧&#xff0c;需要的记得收藏 1.jQuery的引入&#xff1a;本地下载jQuery(后面简称jq)的源文件&#xff0c;开发版本使用非min版&#xff0c;线上使用min版&#xff0c;zepto.js类似&#xff0c;同样的一些基于jq的插件也是如此用法&…

在JDK 8中可通过反射获得构造函数/方法参数元数据

JDK 8较不为人所知的一项新 功能是在编译的Java类中包含参数元数据的可选功能[JDK增强建议&#xff08; JEP &#xff09; 118 ]。 此功能允许Java应用程序在运行时通过反射访问此参数元数据信息。 Java Tutorial的Reflection API路径包括一个名为“ 获取方法参数的名称”的课…

基于面向对象的图片轮播(js原生代码)

无论你想走多远&#xff0c;你都需要不断地走下去。前端最精华的便是原生的js,这也是我们前端工程师的技术分层的重要指标&#xff0c;也提现这你的代码能力&#xff0c;开发的水平。废话不多说&#xff0c;进入今天的主要分享————基于面向对象思想的图片轮播。其效果如下所…

C#定义只能处理枚举类型的泛型类型

1 internal sealed class GenericTypeThatRequireAnEnum<T>2 {3 public static int age 12; //该 static 字段在不同的封闭类型之间是独立不共享的4 5 //静态构造器针对每个封闭类型都会执行一次&#xff0c;泛型类型定义静态构造器的目的就是为了保证传递的类…

Spring应用程序与JNDI连接池的集成测试

我们都知道&#xff0c;无论何时连接到数据库&#xff0c;都需要使用连接池。 所有使用JDBC 4类的现代驱动程序都支持它。 在本文中&#xff0c;我们将概述Spring应用程序中的连接池&#xff0c;以及如何在非JEE环境&#xff08;例如测试&#xff09;中处理相同的上下文。 在S…

在java web工程中jsp页面中使用kindeditor

在这之前我们用Notepad写过kindeditor 在Java web工程里也差不多 首先我们复制之前的thml代码粘贴到工程里 然后把样式也复制进去 然后就可以运行了 转载于:https://www.cnblogs.com/q2546/p/11066539.html

数据分析方法论

把零散的报表整成数据监控体系 把每次拍脑袋的评估整成数据考核体系 在推荐、广告等算法上有所突破&#xff0c;而不是自己瞎捣鼓个没人看的聚类分析 在推送响应等有业绩的地方产出产品&#xff0c;而不是每次用时间序列法预测个销量走势再被业务喷回来。 分析自己的现状&am…

Markdown的使用笔记

Markdown的使用笔记 Markdown在我看是一种使用几种标记符号就可以完成清晰排版的一种标记语言&#xff0c;是写笔记文章的一大利器&#xff0c;使用简单、方便&#xff0c;上手快&#xff0c;而且可以很好的兼容html&#xff0c;即html中的标签在markdown中也同样试用。这边文章…

多项式孤儿桶

巨佬制作人们大家好&#xff0c;我是练习多项式两周半的个人练习生lgl。这里总结一下多项式基本操作。 1.多项式加、减、输出 不说了。 时间复杂度$O(n)$。 2.多项式取模 已知多项式$F(x)$&#xff0c;求它对$x^n$取模。 人话&#xff1a;把$n$次及以上的系数清零。 时间复杂度…

python亲密度_Python OpenCV 图像2D直方图,取经之旅第 25 天

Python OpenCV 365 天学习计划&#xff0c;与橡皮擦一起进入图像领域吧。基础知识铺垫在之前的博客中&#xff0c;我们获取图像直方图的方式都是获取一维直方图&#xff0c;简单说就是只获取一个通道的特征&#xff0c;例如灰度&#xff0c;B 通道&#xff0c;R 通道。今天要学…

清除浮动的方式

1、父级div定义伪类&#xff1a;after和zoom <style type"text/css"> .div1{background:#000080;border:1px solid red;}.div2{background:#800080;border:1px solid red;height:100px;margin-top:10px}.left{float:left;width:20%;height:200px;background:#D…