Da die mit .net gelieferte Paging-Funktion äußerst starr und nicht sehr anpassbar ist, kann sie die Anforderungen nicht erfüllen. Ich habe mehr als eine Woche damit verbracht, eine .net-Paging-Steuerungsfunktion zu schreiben
:
1. Unterstützen Sie Datagrid, Datalist und andere Arten von Datenanzeigesteuerelementen. Solange ein Datenquellensteuerelement vorhanden ist, kann es theoretisch verwendet werden
2. Unterstützt URL-Paging. Jede Seite im URL-Paging kann von Suchmaschinen durchsucht werden und unterstützt das Umschreiben von URLs.
3. Der Steuerungsstil kann angepasst werden
4. Das Paket ist vollständig. Wenn Sie das Programm verwendet haben, müssen Sie nur noch eine Zeile Code
1 /*************************
schreiben.*************** *******************************
2 ** Dateiname: Pager.cs
3 ** Gründer: Yang Xiangwu
4 ** Datum: 27. Juli 2005
5 ** Geändert von:
6** Datum:
7 ** Beschreibung:
8**
9 **-------------------------------- --------------------
10***************************************************** ***** *********************/
11
12 mit System;
13 mit System.Web.UI.WebControls;
14 mit System.Web.UI.HtmlControls;
15 mit System.Web;
16 mit System.Web.UI;
17 using System.Text.RegularExpressions;
18
19 Namespace MyCompany.Controls
20 {
21 /// <Zusammenfassung>
22 /// Paging-Steuerung
23 /// </summary>
24 Pager der öffentlichen Klasse: Label, INamingContainer
25 {
26 #region-Mitgliedsvariablen und Konstruktoren
27 HttpContext context = HttpContext.Current;
28 Label countLabel;
29 HyperLink previousButton;
30 HyperLink nextButton;
31 HyperLink firstButton;
32 HyperLink lastButton;
33 HyperLink[] pagingLinkButtons;
34
35 öffentliche ControlCollection-Steuerelemente überschreiben
36 {
37 bekommen
38 {
39 ConsiderChildControls();
40 Rücklaufbasis.Kontrollen;
41 }
42 }
43
44 protected override void CreateChildControls()
45 {
46 Controls.Clear();
47
48 AddCountLabel();
49
50 AddPageButtons();
51
52 AddPreviousNextHyperLinks();
53
54 AddFirstLastHyperLinks();
55 }
56 #endregion
57
58 #region-Rendering-Methode
59 protected override void Render(HtmlTextWriter-Writer)
60 {
61 // Es wird kein Steuerelement angezeigt, wenn die Gesamtzahl der geänderten Seiten kleiner oder gleich 1 ist
62 // int totalPages = CalculateTotalPages();
63 //
64 // if (totalPages <= 1)
65 // zurück;
66
67 AddAttributesToRender(writer);
68
69 write.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);
70
71 RenderCountLabel(writer);
72
73 RenderFirst(Autor);
74
75 RenderPrevious(writer);
76
77 RenderPagingButtons(writer);
78
79 RenderNext(writer);
80
81 RenderLast(writer);
82}
83
84 void RenderCountLabel(HtmlTextWriter-Writer)
85 {
86 countLabel.RenderControl(writer);
87
88 LiteralControl l = new LiteralControl(" ");
89 l.RenderControl(writer);
90}
91
92 void RenderFirst (HtmlTextWriter-Autor)
93 {
94 firstButton.RenderControl(writer);
95
96 LiteralControl l = new LiteralControl(" ");
97 l.RenderControl(writer);
98 }
99
100 void RenderLast (HtmlTextWriter-Writer)
101 {
102 lastButton.RenderControl(writer);
103
104 LiteralControl l = new LiteralControl(" ");
105 l.RenderControl(writer);
106 }
107
108 void RenderPrevious (HtmlTextWriter-Autor)
109 {
110 previousButton.RenderControl(writer);
111
112 LiteralControl l = new LiteralControl(" ");
113 l.RenderControl(writer);
114 }
115
116 void RenderNext(HtmlTextWriter-Writer)
117 {
118 nextButton.RenderControl(writer);
119
120 LiteralControl l = new LiteralControl(" ");
121 l.RenderControl(writer);
122 }
123
124 private void RenderButtonRange(int start, int end, HtmlTextWriter-Writer)
125 {
126 for (int i = start; i < end; i++)
127 {
128 if (PageIndex == i)
129 {
130 Literal l = new Literal();
131 l.Text = "<font color =red>" + (i + 1).ToString() + "</font>";
132
133 l.RenderControl(writer);
134}
135 sonst
136 {
137 pagingLinkButtons[i].RenderControl(writer);
138 }
139 wenn (i < (Ende - 1))
140 write.Write(" ");
141 }
142
143 LiteralControl l1 = new LiteralControl(" ");
144 l1.RenderControl(writer);
145 }
146
147 private void RenderPagingButtons(HtmlTextWriter-Writer)
148 {
149 int totalPages;
150
151 totalPages = CalculateTotalPages();
152
153 wenn (totalPages <= 10)
154 {
155 RenderButtonRange(0, totalPages,writer);
156 }
157 sonst
158 {
159 int LowerBound = (PageIndex - 4);
160 int UpperBount = (PageIndex + 6);
161
162 if (lowerBound <= 0)
163 untereGrenze = 0;
164
165 if (PageIndex <= 4)
166 RenderButtonRange(0, 10, Writer);
167
168 else if (PageIndex < (totalPages - 5))
169 RenderButtonRange(lowerBound, (PageIndex + 6),writer);
170
171 else if (PageIndex >= (totalPages - 5))
172 RenderButtonRange((totalPages - 10), totalPages,writer);
173}
174 }
175
176 #endregion
177
178 #Region-Kontrollbaum-Methode
179 /// <Zusammenfassung>
180 /// Informations-Tag
181 /// </summary>
182 void AddCountLabel()
183 {
184 countLabel = new Label();
185 countLabel.ID = "countLabel";
186 countLabel.Text = string.Format(text, CalculateTotalPages().ToString("n0"));
187
188 Controls.Add(countLabel);
189 }
190
191 private void AddPageButtons()
192 {
193 pagingLinkButtons = new HyperLink[CalculateTotalPages()];
194
195 for (int i = 0; i < pagingLinkButtons.Length; i++)
196 {
197 pagingLinkButtons[i] = new HyperLink();
198 pagingLinkButtons[i].EnableViewState = false;
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 Controls.Add(pagingLinkButtons[i]);
205 }
206 }
207
208 /// <Zusammenfassung>
209 /// Startseite letzte Seite
210 /// </summary>
211 void AddFirstLastHyperLinks()
212 {
213 firstButton = new HyperLink();
214 firstButton.ID = "First";
215 firstButton.Text = "Home";
216 if(PageIndex != 0 && CalculateTotalPages() > 0)
217 {
218 firstButton.NavigateUrl = GetHrefString(0);
219 }
220 sonst
221 {
222 firstButton.Enabled = false;
223 }
224
225 Controls.Add(firstButton);
226
227 lastButton = new HyperLink();
228 lastButton.ID = "Letzter";
229 lastButton.Text = "Letzte Seite";
230 if(PageIndex != CalculateTotalPages() - 1)
231 {
232 lastButton.NavigateUrl = GetHrefString(CalculateTotalPages() - 1);
233 }
234 sonst
235 {
236 lastButton.Enabled = false;
237 }
238 Controls.Add(lastButton);
239 }
240
241 /// <Zusammenfassung>
242 /// Vorherige Seite Nächste Seite
243 /// </summary>
244 void AddPreviousNextHyperLinks()
245 {
246 previousButton = new HyperLink();
247 previousButton.ID = "Prev";
248 previousButton.Text = "Vorherige Seite";
249 if (HasPrevious)
250 {
251 previousButton.NavigateUrl = GetHrefString(PageIndex - 1);
252 }
253 sonst
254 {
255 previousButton.Enabled = false;
256 }
257 Controls.Add( previousButton);
258
259 nextButton = new HyperLink();
260 nextButton.ID = "Weiter";
261 nextButton.Text = "Nächste Seite";
262 if(HasNext)
263 {
264 nextButton.NavigateUrl = GetHrefString(PageIndex + 1);
265 }
266 sonst
267 {
268 nextButton.Enabled = false;
269 }
270 Controls.Add(nextButton);
271 }
272 #endregion
273
274 #region Privatgrundstücke
275 privater Bool HasPrevious
276 {
277 bekommen
278 {
279 wenn (PageIndex > 0)
280 return true;
281
282 return false;
283}
284 }
285
286 privater Bool HasNext
287 {
288 erhalten
289 {
290 if (PageIndex + 1 < CalculateTotalPages() )
291 return true;
292
293 return false;
294 }
295 }
296 #endregion
297
298 #region Hilfsmethoden und öffentliche Eigenschaften
299
300 /// <Zusammenfassung>
301 /// Holen Sie sich die Hyperlink-Zeichenfolge der Paging-Navigationsschaltfläche
302 /// </summary>
303 /// <param name="pageIndex">Der Seitenindex, der der Paging-Schaltfläche entspricht</param>
304 /// <returns>Hyperlink-String der Paging-Navigationsschaltfläche</returns>
305 privater String GetHrefString(int pageIndex)
306 {
307 string url = Page.Request.RawUrl;
308
309 if (Regex.IsMatch(url, @"(d+).shtml", RegexOptions.IgnoreCase))
310 {
311 url = Regex.Replace(url, @"(d+).shtml", pageIndex + ".shtml");
312 }
313
314 if (Regex.IsMatch(url, @"PageIndex=(d+)", RegexOptions.IgnoreCase))
315 {
316 url = Regex.Replace(url, @"PageIndex=(d+)", "PageIndex=" + pageIndex.ToString());
317 }
318
319 return Page.Server.UrlPathEncode(url);
320 }
321
322 public int CalculateTotalPages()
323 {
324 int totalPagesAvailable;
325
326 if (TotalRecords == 0)
327 Rückgabe 0;
328
329 totalPagesAvailable = TotalRecords / PageSize;
330
331 if ((TotalRecords % PageSize) > 0)
332 totalPagesAvailable++;
333
334 return totalPagesAvailable;
335 }
336
337 /// <Zusammenfassung>
338 /// Aktuelle Seite
339 /// </summary>
340 public int PageIndex
341 {
342 erhalten
343 {
344 int _pageIndex = 0;
345
346 if ((!Page.IsPostBack) && (context.PageIndex > 0))
347 _pageIndex = context.PageIndex;
348 sonst
349 _pageIndex = Convert.ToInt32(ViewState["PageIndex"]);
350
351 if (_pageIndex < 0)
352 Rückgabe 0;
353 sonst
354 {
355 if (_pageIndex > CalculateTotalPages()-1)
356 return CalculateTotalPages()-1;
357 sonst
358 return _pageIndex;
359 }
360 }
361 eingestellt
362 {
363 ViewState["PageIndex"] = value;
364 }
365 }
366
367 /// <Zusammenfassung>
368 ///Anzahl der Datensätze pro Seite
369 /// </summary>
370 public int Seitengröße
371 {
372 erhalten
373 {
374 int pageSize = Convert.ToInt32(ViewState["PageSize"]);
375
376 if (pageSize == 0)
377 {
378 Rückkehr 10;
379 }
380
381 return pageSize;
382 }
383 Sätze
384 {
385 ViewState["PageSize"] = value;
386 }
387
388 }
389
390 /// <Zusammenfassung>
391 ///Gesamtzahl der Datensätze
392 /// </summary>
393 public int TotalRecords
394 {
395 erhalten
396 {
397 return Convert.ToInt32(ViewState["TotalRecords"]);
398 }
399 Sätze
400 {
401 ViewState["TotalRecords"] = value;
402 }
403 }
404
405 private string text = „Insgesamt {0} Seiten“;
406
407 privater String linkCss = "";
408 /// <Zusammenfassung>
409 /// Linkstil
410 /// </summary>
411 öffentliche Zeichenfolge LinkCss
412 {
413 get { return linkCss }
414 set { linkCss = value;}
415 }
416
417 privater String textCss = "";
418 /// <Zusammenfassung>
419 /// Textstil
420 /// </summary>
421 öffentliche Zeichenfolge TextCss
422 {
423 get { return textCss }
424 set { textCss = value;}
425 }
426
427 öffentliche Zeichenfolge TextFormat
428 {
429 bekommen
430 {
431 Rückgabetext;
432 }
433 Sätze
434 {
435 Text = Wert;
436 }
437 }
438
439 #endregion
440 }
441 }
442
Schreiben Sie einfach Folgendes auf die Seite:
1 <%@ Control Language="c#" %>
2 <%@ Register TagPrefix="Anchor" Namespace="MyCompany.Controls" Assembly="MyCompany.Controls" %>
3 <ANCHOR:PAGER id="Pager1" runat="server"></ANCHOR:PAGER>
4