用户空间中定义一个可以分页的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}
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}
在Items.aspx,ItemDetails.aspx,Category.aspx这三个页面中,重复的使用了这个用户控件显示商品