All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
asp.net程序优化技巧略谈_[Asp.Net教程]
ASP.NET(C#)实现一次性上传多张图片(多个文件)_[Asp.Net教程]
技巧,.NET如何访问MySQL数据库_[Asp.Net教程]
PHP实例:PHP实现定时生成HTML网站首页_[PHP教程]
使用C#的反射机制时遇到的问题_.net资料_编程技术
Sql Sever数据库自动备份_[SQL Server教程]
在ASP.NET中利用VWD操作数据库简介_.net资料_编程技术
PHP动态网站制作中关于文件操作的疑难问答_php资料_编程技术
PHP中的session的几个问题_php资料_编程技术
PHP编程中操作目录和文件总结_[PHP教程]
Reading number is top 10 pictures
女人化妆前后的对比
银行20年后可能消失
狗狗与主人神同步1
到南昌西站了2
The money of more than 100 countries and regions21
青春清纯美女大集合4
美女就是美女
Sora aoi on twitter5
Plump, too plump!1
The wise woman of chest1
Download software ranking
网络管理员第三版
Tram sex maniac 2 (H) rar bag12
塘西风月痕
Professional killers2 for Android
Unix video tutorial2
XML+Web+Service开发教程
Boxer's Top ten classic battle6
豪门浪荡史
asp.net技术内幕
asp.netWeb服务器高级编程
归海一刀 published in(发表于) 2014/1/30 0:53:28 Edit(编辑)
asp.net,自定义分页控件_[Asp.Net教程]

asp.net,自定义分页控件_[Asp.Net教程]

asp.net 自定义分页控件_[Asp.Net教程]

页面中数据的分页功能常常是令程序员比较头疼的一件事情,并非是技术原因,而是分页的繁琐(包括:风格统一、参数的维护……)。ASP.NET控件中的GridView和DataGrid等都直接支持分页,但这两中控件所擅长的是处理表格数据,而我们往往需要的显示风格要比表格丰富的多;以我往常经验,我比较喜欢Repeater,可一随心所欲的驾驭它来完成任何复杂的显示,但可惜的是它没有提供自动的分页功能。


我们何不把这分页功能给封装起来呢?


让我们来分析一下分页的封装到底要实现那些功能:
数据显示控件不应该关心“页”的问题,因为它的功能是显示数据,你只需要把它要显示的数据给它就行了;
你必须承认分页的独立性,它与任何显示控件物理上是隔离的,所以我们在设计该控件时不应该考虑任何数据显示控件;
分页控件需要维护一个“当前页”、“页大小”的上下文;
要确定分页控件的数据无关性(这里的“数据”指的是在数据显示控件中显示的数据),数据显示控件的数据源应该由系统的“业务层”提供,而业务层的数据提供服务所查询的具体数据有分页控件的“当前页”、“页大小”确定(如:GetData(int pageIndex,int pageSize););
分页控件必须能够维护当前页面的参数;
分页控件能够维护统一的风格(由用户指定显示样式,否则就显示默认样式)。
根据以上的分析,我们就可以来设计“分页控件”(SimplePaper)了,看看咱们的实现代码吧:


首先实现的是SimplePaper维护的数据及属性,每个属性的描述这里就不再详述了
1 private string _class;
2 private int _pageSize = 10;
3 private int _numberCount = 10;
4 private int _virtualCount = 0;
5
6 private string _prevText = "上一页";
7 private string _nextText = "下一页";
8 private string _firstText = "第一页";
9 private string _lastText = "最末页";
10
11 /**////


12 /// 获取或设置控件关联的样式类
13 ///

14 [Category("Behavior")]
15 [Description("Css的样式类名称")]
16 public string Class {
17 get {
18 return _class;
19 }
20 set {
21 _class = value;
22 }
23 }
24
25 /**////
26 /// 获取或设置“上一页”在分页导航条中显示的文本,默认值“上一页”
27 ///

28 [Category("Behavior")]
29 [Description("上一页文本")]
30 public string PrevText {
31 get {
32 return _prevText;
33 }
34 set {
35 _prevText = value;
36 }
37 }
38
39 /**////
40 /// 获取或设置“下一页”在分页导航条中显示的文本,默认值“下一页”
41 ///

42 [Category("Behavior")]
43 [Description("下一页文本")]
44 public string NextText {
45 get {
46 return _nextText;
47 }
48 set {
49 _nextText = value;
50 }
51 }
52
53 /**////
54 /// 获取或设置“第一页”在分页导航条中显示的文本,默认值“第一页”
55 ///

56 [Category("Behavior")]
57 [Description("第一页文本")]
58 public string FirstText {
59 get {
60 return _firstText;
61 }
62 set {
63 _firstText = value;
64 }
65 }
66
67 /**////
68 /// 获取或设置“最末页”在分页导航条中显示的文本,默认值“最末页”
69 ///

70 [Category("Behavior")]
71 [Description("最末页文本")]
72 public string LastText {
73 get {
74 return _lastText;
75 }
76 set {
77 _lastText = value;
78 }
79 }
80
81 /**////
82 /// 获取或设置分页的大小,默认值10
83 ///

84 [Category("Behavior")]
85 [Description("页大小")]
86 public int PageSize {
87 get {
88 return _pageSize;
89 }
90 set {
91 _pageSize = value;
92 }
93 }
94
95 /**////
96 /// 获取或设置分页导航条中显示的页码数量,默认10
97 ///

98 [Category("Behavior")]
99 [Description("分页中要显示的页码数量")]
100 public int NumberCount {
101 get {
102 return _numberCount;
103 }
104 set {
105 _numberCount = value;
106 }
107 }
108
109 /**////
110 /// 获取或设置查询得到的总记录数
111 ///

112 [Browsable(false)]
113 public int VirtualCount {
114 get {
115 return _virtualCount;
116 }
117 set {
118 _virtualCount = value;
119 }
120 }
121
122 /**////
123 /// 获取总页数
124 ///

125 [Browsable(false)]
126 public int PageCount {
127 get {
128 if (Context == null)
129 return 10;
130
131 int count = (VirtualCount - 1) / PageSize + 1;
132 if (count <= 0)
133 count = 1;
134
135 return count;
136 }
137 }
138
139 /**////
140 /// 获取当前页码
141 ///

142 [Browsable(false)]
143 public int CurrentPage {
144 get {
145 if (Context == null)
146 return 1;
147
148 string tempPage = Page.Request.QueryString[KEY_PAGE];
149 int _currPage = 1;
150 if (!Int32.TryParse(tempPage, out _currPage)) {
151 _currPage = 1;
152 }
153 return _currPage;
154 }
155 }我们要维护当前页面的参数,这要费一点功夫了
1 private static string KEY_PAGE = "page";
2 private static readonly Regex RX = new Regex(@"&page=\d+", RegexOptions.Compiled);
3
4 private string GetQueryFormat() {
5 // Prepare the query string
6 string query = "";
7 if (Context != null) {
8 query = Page.Request.Url.Query.Replace('?', '&');
9 }
10
11 query = RX.Replace(query, String.Empty, -1);
12 query = "[{1}]&nbsp;";
13
14 return query;
15 }分页控件无非是在页面提供一个页码序列、上一页、下一页等超链接,我们只要让控件照样输出(Render)就可以了


protected override void Render(HtmlTextWriter writer) {
string query = GetQueryFormat();


// Prepare the necessary number
int page = CurrentPage;
int count = PageCount;
int nums = NumberCount-1;
int center = nums / 2;
int beginIndex = 1;


// Calculate the first page number in the pagger bar
if (count > nums && page > center) {
beginIndex = page - center;
if ((count - beginIndex) <= nums)
beginIndex = count - nums;
}


// Calculate the last page number in the pagger bar
int endIndex = beginIndex + nums;
if (endIndex > count)
endIndex = count;


// Render the pagger bar

writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID);
if (!String.IsNullOrEmpty(_class)) {
writer.AddAttribute(HtmlTextWriterAttribute.Class, _class);
} else {
writer.AddStyleAttribute(HtmlTextWriterStyle.PaddingLeft, "18px");
writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "14px");
writer.AddStyleAttribute("word-spacing", "4px");
}
writer.RenderBeginTag(HtmlTextWriterTag.Div);


writer.Write(String.Format(query, 1, FirstText));
writer.Write(String.Format(query, page>1?(page-1):1, PrevText));
for (int i = beginIndex; i <= endIndex; i++) {
if (page == i) {
writer.Write(i);
writer.Write("&nbsp;");
} else {
writer.Write(String.Format(query, i, i));
}
}
writer.Write(String.Format(query, page < count ? (page + 1) : page, NextText));
writer.Write(String.Format(query, count, LastText));
writer.Write(String.Format("&nbsp;{0}&nbsp;/&nbsp;{1}", page, count));


writer.RenderEndTag();
}


好了,到现在,我们大功告成,整理起来试一下吧,很爽!!!点下载开始下载!


来源:http://www.cnblogs.com/netEagle







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.