分析petshop3.0显示产品列表
2006-04-23 19:54 Clingingboy 阅读(549) 评论(0) 收藏 举报
用户空间中定义一个可以分页的SimplePager.cs类,这个类继承Repeater,可以实现产品的重复显示,上下翻页
在Items.aspx,ItemDetails.aspx,Category.aspx这三个页面中,重复的使用了这个用户控件显示商品
1
using System;
2
using System.Collections;
3
using System.Collections.Specialized;
4
using System.Text;
5
using System.Text.RegularExpressions;
6
using System.Web.UI;
7
using System.Web.UI.WebControls;
8
9
namespace PetShop.Web.Controls {
10
public class SimplePager : Repeater {
11
12
//静态变量
13
protected const string HTML1 = "<table cellpadding=0 cellspacing=0><tr><td colspan=2>";
14
protected const string HTML2 = "</td></tr><tr class=gridNav><td>";
15
protected const string HTML3 = "</td><td align=right>";
16
protected const string HTML4 = "</td></tr></table>";
17
private static readonly Regex RX = new Regex(@"^&page=\d+", RegexOptions.Compiled);
18
private const string LINK_PREV = "<a href=?page={0}><img src=Images/buttonPrev.gif alt=Previous border=\"0\"></a>";
19
private const string LINK_MORE = "<a href=?page={0}><img src=Images/buttonMore.gif alt=More border=\"0\"></a>";
20
private const string KEY_PAGE = "page";
21
private const string COMMA = "?";
22
private const string AMP = "&";
23
24
protected string emptyText;
25
private IList dataSource;
26
private int pageSize = 10;
27
private int currentPageIndex;
28
private int itemCount;
29
30
override public object DataSource {
31
set {
32
33
try{
34
dataSource = (IList)value;
35
ItemCount = dataSource.Count;
36
}catch{
37
dataSource = null;
38
ItemCount = 0;
39
}
40
}
41
}
42
43
/// <summary>
44
/// 一页产品数量
45
/// </summary>
46
public int PageSize {
47
get { return pageSize; }
48
set { pageSize = value; }
49
}
50
51
/// <summary>
52
/// 总有几页
53
/// </summary>
54
protected int PageCount {
55
get { return (ItemCount - 1) / pageSize; }
56
}
57
58
/// <summary>
59
/// 产品数量
60
/// </summary>
61
virtual protected int ItemCount {
62
get { return itemCount; }
63
set { itemCount = value; }
64
}
65
66
/// <summary>
67
/// 当前页
68
/// </summary>
69
virtual public int CurrentPageIndex {
70
get { return currentPageIndex; }
71
set { currentPageIndex = value; }
72
}
73
74
public string EmptyText {
75
set { emptyText = value; }
76
}
77
78
/// <summary>
79
/// 设置分页
80
/// </summary>
81
/// <param name="index"></param>
82
public void SetPage(int index) {
83
OnPageIndexChanged(new DataGridPageChangedEventArgs(null, index));
84
}
85
86
override protected void OnLoad(EventArgs e) {
87
if (Visible) {
88
string page = Context.Request[KEY_PAGE];
89
int index = (page != null) ? int.Parse(page) : 0;
90
SetPage(index);
91
}
92
}
93
94
95
/// <summary>
96
/// 控制页面重复显示内容重写
97
/// </summary>
98
/// <param name="writer"></param>
99
override protected void Render(HtmlTextWriter writer) {
100
101
//Check there is some data attached
102
if (ItemCount == 0) {
103
writer.Write(emptyText);
104
return;
105
}
106
107
//隐藏查询
108
string query = Context.Request.Url.Query.Replace(COMMA, AMP);
109
query = RX.Replace(query, string.Empty);
110
111
// 写出控件第一行,表头信息
112
writer.Write(HTML1);
113
114
// 调用继承方法
115
base.Render(writer);
116
117
// 表格关闭标记
118
writer.Write(HTML2);
119
120
//判断是否需要上一页下一页按钮
121
//是否需要上一页按钮
122
if (currentPageIndex > 0)
123
writer.Write(string.Format(LINK_PREV, (currentPageIndex - 1) + query));
124
125
//表格关闭标记
126
writer.Write(HTML3);
127
128
//是否需要下一页按钮
129
if (currentPageIndex < PageCount)
130
writer.Write(string.Format(LINK_MORE, (currentPageIndex + 1) + query));
131
132
//表格关闭标记
133
writer.Write(HTML4);
134
}
135
136
override protected void OnDataBinding(EventArgs e) {
137
138
//找到我们想要的重复显示信息
139
int start = CurrentPageIndex * pageSize;
140
int size = Math.Min(pageSize, ItemCount - start);
141
142
IList page = new ArrayList();
143
144
//从数据源中找到它们之间的关系
145
for (int i = 0; i < size; i++)
146
page.Add(dataSource[start + i]);
147
148
//得到数据源
149
base.DataSource = page;
150
base.OnDataBinding(e);
151
152
}
153
154
public event DataGridPageChangedEventHandler PageIndexChanged;
155
156
virtual protected void OnPageIndexChanged(DataGridPageChangedEventArgs e) {
157
if (PageIndexChanged != null)
158
PageIndexChanged(this, e);
159
}
160
}
161
}
using System;2
using System.Collections;3
using System.Collections.Specialized;4
using System.Text;5
using System.Text.RegularExpressions;6
using System.Web.UI;7
using System.Web.UI.WebControls;8

9
namespace PetShop.Web.Controls {10
public class SimplePager : Repeater {11

12
//静态变量13
protected const string HTML1 = "<table cellpadding=0 cellspacing=0><tr><td colspan=2>";14
protected const string HTML2 = "</td></tr><tr class=gridNav><td>";15
protected const string HTML3 = "</td><td align=right>";16
protected const string HTML4 = "</td></tr></table>";17
private static readonly Regex RX = new Regex(@"^&page=\d+", RegexOptions.Compiled);18
private const string LINK_PREV = "<a href=?page={0}><img src=Images/buttonPrev.gif alt=Previous border=\"0\"></a>";19
private const string LINK_MORE = "<a href=?page={0}><img src=Images/buttonMore.gif alt=More border=\"0\"></a>";20
private const string KEY_PAGE = "page";21
private const string COMMA = "?";22
private const string AMP = "&";23

24
protected string emptyText;25
private IList dataSource;26
private int pageSize = 10;27
private int currentPageIndex;28
private int itemCount;29
30
override public object DataSource {31
set {32
33
try{34
dataSource = (IList)value;35
ItemCount = dataSource.Count;36
}catch{37
dataSource = null;38
ItemCount = 0;39
}40
}41
}42

43
/// <summary>44
/// 一页产品数量45
/// </summary>46
public int PageSize {47
get { return pageSize; }48
set { pageSize = value; }49
}50

51
/// <summary>52
/// 总有几页53
/// </summary>54
protected int PageCount {55
get { return (ItemCount - 1) / pageSize; }56
}57

58
/// <summary>59
/// 产品数量60
/// </summary>61
virtual protected int ItemCount {62
get { return itemCount; }63
set { itemCount = value; }64
}65

66
/// <summary>67
/// 当前页68
/// </summary>69
virtual public int CurrentPageIndex {70
get { return currentPageIndex; }71
set { currentPageIndex = value; }72
}73

74
public string EmptyText {75
set { emptyText = value; }76
}77

78
/// <summary>79
/// 设置分页80
/// </summary>81
/// <param name="index"></param>82
public void SetPage(int index) {83
OnPageIndexChanged(new DataGridPageChangedEventArgs(null, index));84
}85

86
override protected void OnLoad(EventArgs e) {87
if (Visible) {88
string page = Context.Request[KEY_PAGE];89
int index = (page != null) ? int.Parse(page) : 0;90
SetPage(index);91
}92
}93

94

95
/// <summary>96
/// 控制页面重复显示内容重写97
/// </summary>98
/// <param name="writer"></param>99
override protected void Render(HtmlTextWriter writer) {100
101
//Check there is some data attached102
if (ItemCount == 0) {103
writer.Write(emptyText);104
return;105
}106

107
//隐藏查询108
string query = Context.Request.Url.Query.Replace(COMMA, AMP);109
query = RX.Replace(query, string.Empty);110

111
// 写出控件第一行,表头信息112
writer.Write(HTML1);113
114
// 调用继承方法115
base.Render(writer);116

117
// 表格关闭标记118
writer.Write(HTML2);119
120
//判断是否需要上一页下一页按钮121
//是否需要上一页按钮122
if (currentPageIndex > 0)123
writer.Write(string.Format(LINK_PREV, (currentPageIndex - 1) + query));124

125
//表格关闭标记126
writer.Write(HTML3);127

128
//是否需要下一页按钮129
if (currentPageIndex < PageCount)130
writer.Write(string.Format(LINK_MORE, (currentPageIndex + 1) + query));131

132
//表格关闭标记133
writer.Write(HTML4);134
}135

136
override protected void OnDataBinding(EventArgs e) {137

138
//找到我们想要的重复显示信息139
int start = CurrentPageIndex * pageSize;140
int size = Math.Min(pageSize, ItemCount - start);141
142
IList page = new ArrayList();143

144
//从数据源中找到它们之间的关系145
for (int i = 0; i < size; i++)146
page.Add(dataSource[start + i]);147
148
//得到数据源149
base.DataSource = page; 150
base.OnDataBinding(e);151
152
}153

154
public event DataGridPageChangedEventHandler PageIndexChanged;155

156
virtual protected void OnPageIndexChanged(DataGridPageChangedEventArgs e) {157
if (PageIndexChanged != null)158
PageIndexChanged(this, e);159
}160
}161
}在Items.aspx,ItemDetails.aspx,Category.aspx这三个页面中,重复的使用了这个用户控件显示商品


浙公网安备 33010602011771号