惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
D
DataBreaches.Net
F
Full Disclosure
腾讯CDC
博客园 - 【当耐特】
MyScale Blog
MyScale Blog
Stack Overflow Blog
Stack Overflow Blog
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
S
SegmentFault 最新的问题
The Register - Security
The Register - Security
WordPress大学
WordPress大学
博客园 - 聂微东
雷峰网
雷峰网
J
Java Code Geeks
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Privacy International News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
A
Arctic Wolf
Scott Helme
Scott Helme
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tor Project blog
博客园 - 三生石上(FineUI控件)
Know Your Adversary
Know Your Adversary
AWS News Blog
AWS News Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CERT Recently Published Vulnerability Notes
O
OpenAI News
Project Zero
Project Zero
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Application and Cybersecurity Blog
Application and Cybersecurity Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
MongoDB | Blog
MongoDB | Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
P
Palo Alto Networks Blog
Schneier on Security
Schneier on Security

博客园 - 逐风者

在Oracle的函数中,返回表类型 在Word 中编辑文档的时候 有时鼠标点击无响应 无法在 COM+ 目录中安装和配置程序集 microsoft.sqlserver.notificationservices.dll [转]关于模态窗口(showModalDialog)的专题讨论! 访问被拒绝:“Interop.Word” [转]oracle临时表相关知识 ASP.NET 未被授权访问所请求的资源。请考虑授予 ASP.NET 请求标识访问此资源的权限。 [转]SQL Server中获得EXEC后面的sql语句或者存储过程的返回值的方法 [转]asp.net中常用的一些小技巧 [转]Oracle中over函数的使用示例 使用OWC生成饼状图和柱状图 Testing SOAP Headers with a Simple Axis Handler 在GetVaryByCustomString方法中使用Session logmnr的简单使用。 Oracle DBA 试题及答案 编写高性能C#代码! dotNet错误集! Oracle错误集! [转]Oracle PL/SQL中如何使用%TYPE和%ROWTYPE
使用自定义控件的方式实现一个分页控件
逐风者 · 2009-05-30 · via 博客园 - 逐风者

一、概述

      在web开发中,常常需要显示一些数据,而为了方便排版及浏览,我们只需要显示所有记录中的一部分。一般情况下,我们采用分页来实现这个需求。实现分页的方法多种多样,在本文中,我们采用了一个分页空间来记录记录总数、当前页、总页数及页面大小等。为了有一个直观上的印象,先展示该控件运行后的效果,效果如下图所示:

二、实现方案

      为了实现该效果图,在asp.net中,可以使用Custom Controls and User Controls两种方式,User Controls的实现方式及其简单,而且使用起来和平时使用Controls的方式差别极大,所以我们采用Custom Controls实现。

      参考资料:Professional ASP.NET 2.0 Server Control and Component Development

三、分页控件的实现

1)、新建一个ASP.NET Server Control项目,

2)、在该项目中添加一个ASP.NET Server Control的Item,并设置其Name为PageOn,

3)、修改该类继承于CompositeControl类,并修改其Attribute为如下所示:

    [DefaultProperty("PageSize")]
    [ToolboxData(
"<{0}:PageOn runat=server Width=100%></{0}:PageOn>")]
    
public class PageOn : CompositeControl

注:自定义控件必须继承自Control或者其子类。

4)、 定义需要被组合的控件

        Label lblMessage;
        LinkButton btnFirst;
        LinkButton btnPrev;
        LinkButton btnNext;
        LinkButton btnLast;
        TextBox txtGoPage;
        Button btnGo;

5)、定义分页控件需要用到的Proptery

      分页控件主要包括页面大小、当前页、总记录数及总页数等属性,并需要保存在ViewState中,详细代码如下所示:

Code

 6)、生成自定义控件的子空间

      生成自定义空间的子空间需要override基类Control中的CreateChildControls()方法,详细代码如下所示:

Code

7)、定义自定义控件的布局

      第6步完成后,所有定义的控件都会顺序显示到页面上了,但是这样的效果不友好,如果对于多行的空间更是如此,所有我们需要定义控件的布局,自定义控件的布局需要重写RenderContents()方法及TagKey属性,此示例中的代码如下所示:

Code

      上面的代码中,我们使用Table来布局,也可以使用其它的布局方式,比如DIV+CSS。

8)、捕捉并处理控件的事件

      到此以后,这些代码已经可以生成文章开头图所显示的效果,但是什么事情也做不了,不能响应该控件上的事件,所有还需要继续实现该控件上的事件代码,实现这些事件采用冒泡所有子控件的事件来实现。

首先,定义一个委托:

    public delegate void PageOnEventHandler(object sender, EventArgs args);

其次,定义基于该委托的事件:

        public event PageOnEventHandler RecPageChanged;

最后,重写冒泡事件,并根据参数特征,捕获需要处理的事件,使其调用需要的方法。

Code

到此就完成了分页控件的开发。

注:可以定制该控件的样式,或者使用属性暴露子控件的属性来控制样式等.

四、使用分页控件

      完成自定义控件的开发后,在Toolbox中Choose Items或者直接在需要使用该自定义控件的项目中引用该项目或者DLL,即可在Toolbox中显示自定义控件了。然后用拖拽的方式即可把分页控件放到需要的地方,就像使用button控件一样简单。

      然后再该页面的后台代码的OnLoad事件中,注册需要被调用的方法到该控件的RecPageChanged事件中,如下所示:

   PageOn1.RecPageChanged += new CustomControl.PageOnEventHandler(PageOn1_RecPageChanged);

      最后,只需要在方法PageOn1_RecPageChanged中编写自己的代码即可。

        void PageOn1_RecPageChanged(object sender, EventArgs args)
        {
              
//To do something
        }

控件的详细代码如下:

Code

 OK,The End。。。