เนื่องจากฟังก์ชันเพจที่มาพร้อมกับ .net นั้นเข้มงวดมากและไม่สามารถปรับแต่งได้มากนัก จึงไม่สามารถตอบสนองความต้องการได้ ฉันใช้เวลามากกว่าหนึ่งสัปดาห์ในการเขียน
ฟีเจอร์การควบคุมเพจของ .net:
1. รองรับการควบคุม datagrid, datalist และประเภทอื่นๆ ตามทฤษฎี ตราบใดที่มีการควบคุมแหล่งข้อมูล ก็สามารถใช้ได้
2. รองรับการเพจ URL แต่ละหน้าในการเพจ URL สามารถค้นหาได้โดยเครื่องมือค้นหาและรองรับการเขียน URL ใหม่
3. สามารถปรับแต่งสไตล์การควบคุมได้
4. แพ็คเกจเสร็จสมบูรณ์ หากใช้งานโปรแกรมแล้วต้องเขียนโค้ด
1 บรรทัดเท่านั้น /************************* ************* *********************************
2 ** ชื่อไฟล์: Pager.cs
3 ** ผู้ก่อตั้ง: หยาง เซียงหวู่
4 ** วันที่: 27 กรกฎาคม 2548
5 ** ปรับปรุงโดย:
6** วันที่:
7 ** คำอธิบาย:
8**
9 **--------------------------------------------------- -- ------------------
10************************************************* ***** *******************/
11
12 ใช้ระบบ;
13 ใช้ System.Web.UI.WebControls;
14 ใช้ System.Web.UI.HtmlControls;
15 ใช้ System.Web;
16 ใช้ System.Web.UI;
17 ใช้ System.Text.RegularExpressions;
18
19 เนมสเปซ MyCompany.Controls
20 {
21 /// <สรุป>
22 /// การควบคุมเพจ
23 /// </สรุป>
เพจเจอร์สาธารณะ 24 รายการ: ป้ายกำกับ, INamingContainer
25 {
26 #region ตัวแปรและตัวสร้างสมาชิก
27 บริบท HttpContext = HttpContext.Current;
28 ฉลาก countLabel;
29 ไฮเปอร์ลิงก์ปุ่มก่อนหน้า;
30 ไฮเปอร์ลิงก์ปุ่มถัดไป;
31 ไฮเปอร์ลิงก์ปุ่มแรก;
32 ไฮเปอร์ลิงก์ปุ่มสุดท้าย;
33 ไฮเปอร์ลิงก์ [] pagingLinkButtons;
34
35 การควบคุมการแทนที่สาธารณะ ControlCollection
36 {
37 ได้
38 {
39 SureChildControls();
40 ฐานส่งคืนการควบคุม;
41 }
42 }
43
44 การแทนที่การป้องกันถือเป็นโมฆะ CreateChildControls()
45 {
46 การควบคุม ล้าง();
47
48 แอดเคาท์เลเบล();
49
50 ปุ่มเพิ่มหน้า();
51
52 เพิ่มก่อนหน้าถัดไปไฮเปอร์ลิงก์();
53
54 เพิ่มFirstLastHyperLinks();
55 }
56#เอนรีเจียน
57
58 #region วิธีการเรนเดอร์
59 การแทนที่การป้องกันเป็นโมฆะ Render (ผู้เขียน HtmlTextWriter)
60 {
61 // จะไม่มีการแสดงการควบคุมเมื่อจำนวนหน้าทั้งหมดที่แก้ไขน้อยกว่าหรือเท่ากับ 1
62 // int TotalPages = คำนวณTotalPages();
63 //
64 // ถ้า (หน้ารวม <= 1)
65 // กลับ;
66
67 AddAttributesToRender(ผู้เขียน);
68
69 write.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, เท็จ);
70
71 RenderCountLabel(ผู้เขียน);
72
73 RenderFirst(ผู้เขียน);
74
75 RenderPrevious(ผู้เขียน);
76
77 RenderPagingButtons (ผู้เขียน);
78
79 RenderNext(ผู้เขียน);
80
81 RenderLast(ผู้เขียน);
82}
83
84 โมฆะ RenderCountLabel (ผู้เขียน HtmlTextWriter)
85 {
86 countLabel.RenderControl(ผู้เขียน);
87
88 LiteralControl l = ใหม่ LiteralControl(" ");
89 l.RenderControl(ผู้เขียน);
90}
91
92 เป็นโมฆะ RenderFirst (ผู้เขียน HtmlTextWriter)
93 {
94 firstButton.RenderControl (ผู้เขียน);
95
96 LiteralControl l = ใหม่ LiteralControl(" ");
97 l.RenderControl (ผู้เขียน);
98 }
99
100 โมฆะ RenderLast (ผู้เขียน HtmlTextWriter)
101 {
102 LastButton.RenderControl (ผู้เขียน);
103
104 LiteralControl l = ใหม่ LiteralControl(" ");
105 l.RenderControl (ผู้เขียน);
106 }
107
108 โมฆะ RenderPrevious (ผู้เขียน HtmlTextWriter)
109 {
110 PreviousButton.RenderControl(ผู้เขียน);
111
112 LiteralControl l = ใหม่ LiteralControl(" ");
113 l.RenderControl (ผู้เขียน);
114 }
115
116 โมฆะ RenderNext (ผู้เขียน HtmlTextWriter)
117 {
118 nextButton.RenderControl (ผู้เขียน);
119
120 LiteralControl l = ใหม่ LiteralControl(" ");
121 l.RenderControl (ผู้เขียน);
122 }
123
124 โมฆะส่วนตัว RenderButtonRange (เริ่มต้น int, int end, ผู้เขียน HtmlTextWriter)
125 {
126 สำหรับ (int i = start; i < end; i++)
127 {
128 ถ้า (ดัชนีหน้า == i)
129 {
130 ตัวอักษร l = ตัวอักษรใหม่ ();
131 l.Text = "<font color =red>" + (i + 1).ToString() + "</font>";
132
133 l.RenderControl (ผู้เขียน);
134}
135 อื่นๆ
136 {
137 pagingLinkButtons[i].RenderControl(ผู้เขียน);
138 }
139 ถ้า (ฉัน < (จบ - 1))
140 นักเขียนWrite(" ");
141 }
142
143 LiteralControl l1 = ใหม่ LiteralControl(" ");
144 l1.RenderControl (ผู้เขียน);
145 }
146
147 โมฆะส่วนตัว RenderPagingButtons (ผู้เขียน HtmlTextWriter)
148 {
149 หน้าทั้งหมด;
150
151 หน้าทั้งหมด = คำนวณจำนวนหน้าทั้งหมด();
152
153 ถ้า (หน้ารวม <= 10)
154 {
155 RenderButtonRange (0, หน้าทั้งหมด, ผู้เขียน);
156 }
157 อื่นๆ
158 {
159 int ขอบเขตล่าง = (PageIndex - 4);
160 int upperBount = (ดัชนีเพจ + 6);
161
162 ถ้า (ขอบเขตล่าง <= 0)
163 ขอบเขตล่าง = 0;
164
165 ถ้า (ดัชนีหน้า <= 4)
166 RenderButtonRange (0, 10, ผู้เขียน);
167
168 อื่นถ้า (PageIndex < (totalPages - 5))
169 RenderButtonRange (ขอบเขตล่าง, (PageIndex + 6), ตัวเขียน);
170
171 อื่นถ้า (PageIndex >= (totalPages - 5))
172 RenderButtonRange ((หน้ารวม - 10), หน้ารวม, ตัวเขียน);
173}
174 }
175
176 #สิ้นสุดภูมิภาค
177
178 #วิธีควบคุมแผนผังภูมิภาค
179 /// <สรุป>
180 /// ป้ายข้อมูล
181 /// </สรุป>
182 เป็นโมฆะ AddCountLabel()
183 {
184 countLabel = ป้ายกำกับใหม่ ();
185 countLabel.ID = "countLabel";
186 countLabel.Text = string.Format(ข้อความ, CalculateTotalPages().ToString("n0"));
187
188 การควบคุมเพิ่ม (countLabel);
189 }
190
191 AddPageButtons เป็นโมฆะส่วนตัว ()
192 {
193 pagingLinkButtons = ไฮเปอร์ลิงก์ใหม่ [CalculateTotalPages()];
194
195 สำหรับ (int i = 0; i < pagingLinkButtons.Length; i++)
196 {
197 pagingLinkButtons[i] = ไฮเปอร์ลิงก์ใหม่();
198 pagingLinkButtons[i].EnableViewState = เท็จ;
199 pagingLinkButtons[i].Text = (i + 1).ToString();
200 pagingLinkButtons[i].ID = i.ToString();
201 pagingLinkButtons[i].CssClass = linkCss;
202 pagingLinkButtons[i].NavigateUrl = GetHrefString(i);
203
204 การควบคุมเพิ่ม (pagingLinkButtons [i]);
205 }
206 }
207
208 /// <สรุป>
209 /// หน้าแรก หน้าสุดท้าย
210 /// </สรุป>
211 โมฆะ AddFirstLastHyperLinks()
212 {
213 firstButton = ไฮเปอร์ลิงก์ใหม่ ();
214 firstButton.ID = "แรก";
215 firstButton.Text = "หน้าแรก";
216 ถ้า(PageIndex != 0 && CalculateTotalPages() > 0)
217 {
218 firstButton.NavigateUrl = GetHrefString(0);
219 }
220 อื่นๆ
221 {
222 firstButton.Enabled = เท็จ;
223 }
224
225 การควบคุมเพิ่ม (ปุ่มแรก);
226
227 LastButton = ไฮเปอร์ลิงก์ใหม่ ();
228 LastButton.ID = "สุดท้าย";
229 LastButton.Text = "หน้าสุดท้าย";
230 ถ้า(PageIndex != CalculateTotalPages() - 1)
231 {
232 LastButton.NavigateUrl = GetHrefString(CalculateTotalPages() - 1);
233 }
234 อื่นๆ
235 {
236 LastButton.Enabled = เท็จ;
237 }
238 การควบคุมเพิ่ม (ปุ่มสุดท้าย);
239 }
240
241 /// <สรุป>
242 /// หน้าก่อน หน้าถัดไป
243 /// </สรุป>
244 เป็นโมฆะ AddPreviousNextHyperLinks()
245 {
246 PreviousButton = ไฮเปอร์ลิงก์ใหม่ ();
247 PreviousButton.ID = "ก่อนหน้า";
248 PreviousButton.Text = "หน้าก่อนหน้า";
249 ถ้า (มีก่อนหน้า)
250 {
251 PreviousButton.NavigateUrl = GetHrefString(PageIndex - 1);
252 }
253 อื่น ๆ
254 {
255 PreviousButton.Enabled = เท็จ;
256 }
257 การควบคุมเพิ่ม (ปุ่มก่อนหน้า);
258
259 ปุ่มถัดไป = ไฮเปอร์ลิงก์ใหม่ ();
260 nextButton.ID = "ถัดไป";
261 nextButton.Text = "หน้าถัดไป";
262 ถ้า (มีต่อไป)
263 {
264 nextButton.NavigateUrl = GetHrefString(PageIndex + 1);
265 }
266 อื่น ๆ
267 {
268 nextButton.Enabled = เท็จ;
269 }
270 การควบคุมเพิ่ม (ปุ่มถัดไป);
271 }
272 #สิ้นสุดภูมิภาค
273
274 #ภูมิภาค ทรัพย์สินส่วนตัว
275 บูลส่วนตัวมีก่อนหน้า
276 {
277 ได้
278 {
279 ถ้า (ดัชนีหน้า > 0)
280 คืนค่าจริง;
281
282 กลับเท็จ;
283}
284 }
285
286 บูลส่วนตัว HasNext
287 {
288 ได้รับ
289 {
290 ถ้า (PageIndex + 1 < CalculateTotalPages() )
291 คืนค่าจริง;
292
293 กลับเท็จ;
294 }
295 }
296 #สิ้นสุดภูมิภาค
297
298 #region Helper วิธีการและคุณสมบัติสาธารณะ
299
300 /// <สรุป>
301 /// รับสตริงไฮเปอร์ลิงก์ของปุ่มนำทางเพจ
302 /// </สรุป>
303 /// <param name="pageIndex">ดัชนีหน้าที่สอดคล้องกับปุ่มเพจ</param>
304 /// <returns>สตริงไฮเปอร์ลิงก์ของปุ่มนำทางเพจ</returns>
305 สตริงส่วนตัว GetHrefString (int pageIndex)
306 {
307 string url = Page.Request.RawUrl;
308
309 ถ้า (Regex.IsMatch(url, @"(d+).shtml", RegexOptions.IgnoreCase))
310 {
311 url = Regex.Replace(url, @"(d+).shtml", pageIndex + ".shtml");
312 }
313
314 ถ้า (Regex.IsMatch(url, @"PageIndex=(d+)", RegexOptions.IgnoreCase))
315 {
316 url = Regex.Replace(url, @"PageIndex=(d+)", "PageIndex=" + pageIndex.ToString());
317 }
318
319 ส่งคืน Page.Server.UrlPathEncode(url);
320 }
321
322 สาธารณะ int CalculateTotalPages()
323 {
324 จำนวนหน้าทั้งหมดที่มีอยู่;
325
326 ถ้า (บันทึกรวม == 0)
327 กลับ 0;
328
329 TotalPagesAvailable = TotalRecords / ขนาดหน้า;
330
331 ถ้า ((TotalRecords % PageSize) > 0)
332 จำนวนหน้าที่มีอยู่++;
333
334 ส่งคืนทั้งหมดเพจที่มีอยู่;
335 }
336
337 /// <สรุป>
338 /// หน้าปัจจุบัน
339 /// </สรุป>
340 สาธารณะ int PageIndex
341 {
342 ได้รับ
343 {
344 int _pageIndex = 0;
345
346 ถ้า ((!Page.IsPostBack) && (context.PageIndex > 0))
347 _pageIndex = บริบท PageIndex;
348 อื่นๆ
349 _pageIndex = Convert.ToInt32(ViewState["PageIndex"]);
350
351 ถ้า (_pageIndex < 0)
352 กลับ 0;
353 อื่นๆ
354 {
355 ถ้า (_pageIndex > CalculateTotalPages()-1)
356 ส่งกลับ CalculateTotalPages()-1;
357 อื่นๆ
358 กลับ _pageIndex;
359 }
360 }
361ชุด
362 {
363 ViewState["PageIndex"] = ค่า;
364 }
365 }
366
367 /// <สรุป>
368 ///จำนวนบันทึกต่อหน้า
369 /// </สรุป>
370 สาธารณะ int PageSize
371 {
372 ได้รับ
373 {
374 int pageSize = Convert.ToInt32(ViewState["PageSize"]);
375
376 ถ้า (ขนาดหน้า == 0)
377 {
378 กลับ 10;
379 }
380
381 กลับหน้าขนาด;
382 }
383 ชุด
384 {
385 ViewState["PageSize"] = ค่า;
386 }
387
388 }
389
390 /// <สรุป>
391 ///จำนวนบันทึกทั้งหมด
392 /// </สรุป>
393 สาธารณะ int TotalRecords
394 {
395รับ
396 {
397 ส่งคืน Convert.ToInt32 (ViewState ["TotalRecords"]);
398 }
399 ชุด
400 {
401 ViewState["TotalRecords"] = ค่า;
402 }
403 }
404
ข้อความสตริงส่วนตัว 405 = "ทั้งหมด {0} หน้า";
406
407 สตริงส่วนตัว linkCss = "";
408 /// <สรุป>
409 /// แบบลิงค์
410 /// </สรุป>
411 สตริงสาธารณะ LinkCss
412 {
413 รับ { กลับ linkCss;
414 ชุด { linkCss = ค่า;}
415 }
416
417 สตริงส่วนตัว textCss = "";
418 /// <สรุป>
419 /// รูปแบบข้อความ
420 /// </สรุป>
421 สตริงสาธารณะ TextCss
422 {
423 รับ { กลับ textCss;
424 ชุด { textCss = ค่า;}
425 }
426
427 รูปแบบข้อความสตริงสาธารณะ
428 {
429 รับ
430 {
431 กลับข้อความ;
432 }
433 ชุด
434 {
435 ข้อความ = ค่า;
436 }
437 }
438
439#endregion
440 }
441 }
442
เพียงเขียนสิ่งนี้ลงในหน้า:
1 <%@ ภาษาควบคุม = "c#" %>
2 <%@ ลงทะเบียน TagPrefix="Anchor" Namespace="MyCompany.Controls" Assembly="MyCompany.Controls" %>
3 <ANCHOR:PAGER id="Pager1" runat="server"></ANCHOR:PAGER>
4