`
izuoyan
  • 浏览: 8944537 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一套可嵌入或独立使用的翻页控件: WebPager(附源码)

阅读更多
于ASP.NET里的翻页控件,大家应该都很熟悉,网上也有很多这样的例子。我也做过不少各种类型的此类控件,但设计思想都不太一样。从功能上看,一种是只呈现翻页所需的外观和操作,一种是同时包装了对数据的分页功能。从形式上看,有扩展DataGrid翻页功能的(嵌入式),也有能够独立实现翻页的。
  而我做这套 WebPager 的目的,就是希望能够兼顾以上各个方面,做出灵活而扩展性强的翻页控件。也就是说它既可以嵌入DataGrid,又可以单独使用。 同时最好能够让我可以方便地切换翻页样式或者外观,而不用改变类或接口。
独立

内嵌
外观


  实现这个目标其实不难,我们本来是要继承DataGrid类,然后重写其产生和控制翻页的部分。
publicsealedclassAdvDataGrid:DataGrid{
publicAdvDataGrid(){
this.ItemCreated+=newDataGridItemEventHandler(AdvDataGrid_ItemCreated);
}


privatevoidAdvDataGrid_ItemCreated(objectsender,System.Web.UI.WebControls.DataGridItemEventArgse){
if(e.Item.ItemType==ListItemType.Pager){
Literalmsg
=newLiteral();
msg.Text
="把这三句代码替换成呈现实际翻页控件外观的代码。";
((TableCell)e.Item.Controls[
0]).Controls.Add(msg);
}

}

}

  要实现翻页子控件的重用,既能独立使用,又能内嵌,只要把这部分代码抽离出来,放在一个独立的类里面就可以。在这里,我们提取所有翻页子控件的公共接口:IDataPagerItemCreated 事件里的代码要改成:
IDataPagerpager=DataPagerFactory.CreateDataPager("SimplePager");
((TableCell)e.Item.Controls[
0]).Controls.Add(pager);

  这里我们先打住,看看这样做的好处。首先,翻页代码放到独立的类中,有助于复用(为独立使用翻页控件做准备);其次,由于提炼出公共接口,凡是实现该接口的类都可以被加载到DataGrid中作为翻页子控件,实现了多样化;第三,使用工厂模式创建具体的翻页子控件,可以非常方便地切换外观。

  我们这里只实现了内嵌DataGrid。如果DataList怎么办?没关系,照葫芦画瓢。在 ItemCreated 事件中重写外观。DataList不支持翻页,没有 ItemType == ListItemType.Pager 的?也不要紧,我们可以在 DataList 的 Footer 部分加载翻页子控件。
  我们这里实现了两个翻页子控件的容器,DataGrid 和 DataList。看看他们有什么共同点没有。首先需要有分页信息吧,比如当前页,页大小,总记录等等。这个类我们已经封装到了 PagerInfo 里面。所有的容器都要有这样一个属性。其次,我们要能够通过修改 PagerClass 来随时改变这个容器具体使用的 Pager 的种类。这个也要做到属性里。还有翻页发生时所触发的事件,这个也是必不可少的。
  那么我们这里再为翻页子控件的容器类再提取一个接口: IDataPagerContainer。所有可以加载翻页控件的容器都要实现该接口。
  这样,我们的 WebPager 的类结构基本上就已经形成了。由 IDataPager 接口延伸出各种各样的翻页子控件。由 IDataPagerContainer 接口延伸出各种各样的包含容器。它们之间可以自由地挂接与组合。

  剩下最后一个问题没有解决。就是独立使用翻页控件。这个也是比较简单的。所有翻页控件都有 PagerInfo 属性,描述了当前分页信息。当页面改变时,它的 PagerInfo.PageIndex 也随着改变。然后根据这个来取得不同的数据,然后让数据显示控件进行绑定即可。
  这里我本来是打算做成翻页子控件能够完全独立地运行和显示。也就是说它们可以被拖拽到页面。但后来发现这样实现起来很不漂亮,而且抛弃了原先的结构。所以子控件的独立使用,其实还是借助了一个第三方的容器: DataPagerContainer。这是一个通用并且简单的 IDataPagerContainer 接口的实现。这样独立使用翻页控件的时候,仍然可以方便地改变外观。
  类结构:
  Hooyee.Utils.PagerInfo 封装数据分页信息。 如PageSize、PageIndex
  Hooyee.WebControls.IDataPagerContainer 翻页控件的容器对象的公共支持接口。
    Hooyee.WebControls.DataPagerContainer 通用的数据翻页控件的容器类。 可以作为默认容器。
    Hooyee.WebControls.AdvDataGrid 支持翻页控件的DataGrid
    Hooyee.WebControls.AdvDataList 支持翻页控件的DataList
  Hooyee.WebControls.IDataPager 实现数据翻页功能的用户控件的公共接口。
    Hooyee.WebControls.DataPagerBase 用于实现数据翻页功能的用户控件的公共抽象基类。
      Hooyee.WebControls.FirstPager 一个具体的翻页子控件实现。
      Hooyee.WebControls.SecondPager 一个具体的翻页子控件实现。
分享到:
评论

相关推荐

    一套可嵌入或独立使用的翻页控件_ WebPager(附源码).

    在Microsoft Visual Studio中使用,一套可嵌入或独立使用的翻页控件_ WebPager(附源码).

    asp.net知识库

    正式发布表达式计算引擎WfcExp V0.9(附源码) 运算表达式类的原理及其实现 #实现的18位身份证格式验证算法 身份证15To18 的算法(C#) 一组 正则表达式 静态构造函数 忽略大小写Replace效率瓶颈IndexOf 随机排列算法 ...

    友思SCO在线售卡网(.Net开源版) V1.1[Access].rar

    一套简易型在线售卡系统,使用ASP.NET1.1 Access,主要用于学**研究所用,采用标准三层构架,不管你现在是菜鸟还是高手,都同样适合学**. 完成了和快钱(www.99bill.com)银行网关的连接,实现了网上银行在线转帐、与...

    学籍管理系统

    SCard -- 主Web程序 WebPager -- 分页控件 DCard -- 封装了加密密钥 <br/>[数据库路径配置] Web.config文件下 <!-- Access 数据库路径 --> <add key="DataBasePath" value="/SCard/DB/DB....

    仿Haier 海尔家电家居触屏版html5响应式手机wap企业网站模板.zip

    触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板

    手机wap网站 仿腾讯新闻.zip

    触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板

    机械设计多层储物架sw18可编辑非常好的设计图纸100%好用.zip

    机械设计多层储物架sw18可编辑非常好的设计图纸100%好用.zip

    基于普中51开发板的超声波测距+蜂鸣器报警 (附开发板原理图)

    基于普中51开发板的超声波测距+蜂鸣器报警 (附开发板原理图) 基于普中51开发板的超声波测距+蜂鸣器报警 (附开发板原理图)

    【重磅、详细、2022更新!】1990-2022上市公司环境保护税(排污费)数据大合集!

    【原创整理,严禁任何团队和个人转载获利,转载必究!】 环境保护 税的实施效应是近年来研究的热点方向之一,将上市公司环境保护税与企业创新、企业治理 等领域问题的实证研究更是如日中天。附件内为1990-2022上市公司环境保护税( 排污费)数据大合集,包括上市公司应缴环境保护税、实缴环境保护税及分项数据,样本期 长达33年!累计涵盖近15w+观测值数量,3500+样本企业,数据涵盖年度与月度 变量,可根据需要自行筛选选用!本数据集包括参考来自权威文献做法构建的衡量上市公司 环境保护税的详细数据,包括测算出的最终指标以及所有原始数据! 附 件内所有文件均包括xls、dta格式面板数据,无偿赠送您权威参考文献原文、参考代 码、原始数据(指标构建所需的各个变量都可直接查到,充分保证数据真实性、准确性!! )以及2022最新版本上市公司年度信息,充分节约您宝贵的时间,提升科研效率!本数 据集可直接用Stata、Eviews等软件进行计量检验!本数据集适用于所有涉及上 市公司环境保护税效应方向的实证研究与理论分析,更是非常适合在此基础上进行拓展研究 ,能够帮助大家高

    自动编码器autoencoder-python源码.zip

    自动编码器autoencoder-python源码.zip

    node-v10.16.2-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    ONNXRuntime部署yolov5-lite目标检测包含C++和Python 源码+模型+说明.zip

    ONNXRuntime部署yolov5-lite目标检测包含C++和Python 源码+模型+说明.zip

    省级2008-2020信息传输、软件和信息技术服务业城镇单位就业人员+软件业务收入等

    省级2008-2020信息传输、软件和信息技术服务业城镇单位就业人员+软件业务收 入等 指标包括:信息传输、软件和信息技术服务业城镇单位就业人员(万人)、软件业务 收入(万元)、高技术产品出口额占商品出口额比重(%)

    基于matlab图像处理的碎纸片的拼接复原内含数据集和源码.docx

    本文档是课题研究的研究报告内含调研以及源码设计以及结果分析

    Unity3D版本游戏源码2-97草莓大作战游戏开发模板BerryMatch-Three4.2

    Unity3D版本游戏源码2-97草莓大作战游戏开发模板Berry Match-Three 4.2提取方式是百度网盘分享地址

    南京政府微门户触屏版手机wap政府网站模板下载.zip

    触屏版自适应手机wap软件网站模板 触屏版自适应手机wap软件网站模板

    node-v12.1.0-linux-ppc64le.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    某城市表层土壤重金属污染分析方案设计以及结果分析.doc

    本文档是课题研究的研究报告内含调研以及源码设计以及结果分析

    unity开发的相关知识什么是unity开发以及学习的意义

    unity开发

    HTML5+CSS+JS精品网页模板100 大学生期末大作业 Web前端网页制作

    HTML5+CSS+JS精品网页模板,设置导航条、轮翻效果,鼠标滑动效果,自动弹窗,点击事件、链接等功能;适用于大学生期末大作业或公司网页制作。响应式网页,可以根据不同的设备屏幕大小自动调整页面布局; 支持如Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件进行编辑修改; 支持包括IE、Firefox、Chrome、Safari主流浏览器浏览; 下载文件解压缩,用Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件打开,只需更改源代码中的文字和图片可直接使用。图片的命名和格式需要与原图片的名字和格式一致,其他的无需更改。如碰到HTML5+CSS+JS等专业技术问题,以及需要对应行业的模板等相关源码、模板、资料、教程等,随时联系博主咨询。 网页设计和制作、大学生网页课程设计、期末大作业、毕业设计、网页模板,网页成品源代码等,5000+套Web案例源码,主题涵盖各行各业,关注作者联系获取更多源码; 更多优质网页博文、网页模板移步查阅我的CSDN主页:angella.blog.csdn.net。

Global site tag (gtag.js) - Google Analytics