Étant donné que la fonction de pagination fournie avec .net est extrêmement rigide et peu personnalisable, elle ne peut pas répondre aux besoins. J'ai passé plus d'une semaine à écrire une
fonctionnalité de contrôle de pagination .net :
1. Prend en charge la grille de données, la liste de données et d'autres types de contrôles d'affichage de données. En théorie, tant qu'il existe un contrôle de source de données, il peut être utilisé.
2. Prend en charge la pagination d'URL. Chaque page de la pagination d'URL peut être recherchée par les moteurs de recherche et prend en charge la réécriture d'URL.
3. Le style de contrôle peut être personnalisé
4. Le package est complet Si vous avez utilisé le programme, il vous suffit d'écrire une ligne de code
1 /***************************. *************** *******************************
2 ** Nom du fichier : Pager.cs
3** Fondateur : Yang Xiangwu
4 ** Date : 27 juillet 2005
5 ** Modifié par :
6**Date :
7 ** Description :
8**
9 **------------------------------------------------------------ --- ------------------
10*************************************************** ***** *******************/
11
12 utilisant le système ;
13 en utilisant System.Web.UI.WebControls ;
14 en utilisant System.Web.UI.HtmlControls ;
15 en utilisant System.Web ;
16 en utilisant System.Web.UI ;
17 en utilisant System.Text.RegularExpressions ;
18
19 espace de noms MyCompany.Controls
20 {
21 /// <résumé>
22 /// Contrôle de pagination
23 /// </summary>
Pager de 24 classes publiques : Label, INamingContainer
25 {
26 variables et constructeurs membres #region
27 Contexte HttpContext = HttpContext.Current ;
28 Nombre d'étiquettesLabel ;
29 Bouton précédent HyperLink ;
30 Bouton suivant HyperLink ;
31 Premier bouton hyperlien ;
32 Hyperlien lastButton ;
33 HyperLink[] paginationLinkButtons ;
34
35 contrôles ControlCollection de remplacement public
36 {
37 obtenir
38 {
39 EnsureChildControls();
40 bases de retour.Contrôles ;
41 }
42 }
43
44 remplacement protégé void CreateChildControls()
45 {
46 Contrôles.Clear();
47
48 AddCountLabel();
49
50 AddPageButtons();
51
52 AddPreviousNextHyperLinks();
53
54 AddFirstLastHyperLinks();
55 }
56 #endregion
57
58 Méthode de rendu #region
59 remplacement protégé void Render (écrivain HtmlTextWriter)
60 {
61 // Aucun champ ne sera affiché lorsque le nombre total de pages modifiées est inférieur ou égal à 1
62 // int totalPages = CalculateTotalPages();
63 //
64 // si (totalPages <= 1)
65 // retour ;
66
67 AddAttributesToRender(écrivain);
68
69writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);
70
71 RenderCountLabel(écrivain);
72
73 RenderFirst (écrivain);
74
75 RenderPrevious(écrivain);
76
77 RenderPagingButtons (écrivain);
78
79 RenderNext(écrivain);
80
81 RenderLast (écrivain);
82}
83
84 void RenderCountLabel (écrivain HtmlTextWriter)
85 {
86 countLabel.RenderControl(écrivain);
87
88 LiteralControl l = new LiteralControl(" ");
89 l.RenderControl(écrivain);
90}
91
92 void RenderFirst (écrivain HtmlTextWriter)
93 {
94 firstButton.RenderControl(écrivain);
95
96 LiteralControl l = new LiteralControl(" ");
97 l.RenderControl(écrivain);
98 }
99
100 void RenderLast (écrivain HtmlTextWriter)
101 {
102 lastButton.RenderControl(écrivain);
103
104 LiteralControl l = new LiteralControl(" ");
105 l.RenderControl(écrivain);
106 }
107
108 void RenderPrevious (écrivain HtmlTextWriter)
109 {
110 précédentButton.RenderControl(écrivain);
111
112 LiteralControl l = new LiteralControl(" ");
113 l.RenderControl(écrivain);
114 }
115
116 void RenderNext (écrivain HtmlTextWriter)
117 {
118 nextButton.RenderControl(écrivain);
119
120 LiteralControl l = new LiteralControl(" ");
121 l.RenderControl(écrivain);
122 }
123
124 private void RenderButtonRange (int début, int fin, écrivain HtmlTextWriter)
125 {
126 pour (int i = début; i < fin; i++)
127 {
128 si (PageIndex == i)
129 {
130 Littéral l = nouveau Littéral();
131 l.Text = "<font color =red>" + (i + 1).ToString() + "</font>";
132
133 l.RenderControl(écrivain);
134}
135 autres
136 {
137 paginationLinkButtons[i].RenderControl(writer);
138 }
139 si (i < (fin - 1))
140 écrivain.Write(" ");
141 }
142
143 LiteralControl l1 = new LiteralControl(" ");
144 l1.RenderControl(écrivain);
145 }
146
147 RenderPagingButtons privés vides (écrivain HtmlTextWriter)
148 {
149 pages totales entières ;
150
151 totalPages = CalculateTotalPages();
152
153 si (totalPages <= 10)
154 {
155 RenderButtonRange(0, totalPages, écrivain);
156 }
157 autres
158 {
159 int lowerBound = (PageIndex - 4);
160 int upperBount = (PageIndex + 6);
161
162 si (limite inférieure <= 0)
163 limite inférieure = 0 ;
164
165 si (PageIndex <= 4)
166 RenderButtonRange(0, 10, écrivain);
167
168 sinon si (PageIndex < (totalPages - 5))
169 RenderButtonRange(lowerBound, (PageIndex + 6), écrivain);
170
171 sinon si (PageIndex >= (totalPages - 5))
172 RenderButtonRange((totalPages - 10), totalPages, écrivain);
173}
174 }
175
176 #endregion
177
178 Méthode de l'arbre de contrôle #région
179 /// <résumé>
180 /// Balise d'information
181 /// </summary>
182 annuler 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 vide privé AddPageButtons()
192 {
193 pagingLinkButtons = new HyperLink[CalculateTotalPages()];
194
195 pour (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 paginationLinkButtons[i].CssClass = linkCss;
202 pagingLinkButtons[i].NavigateUrl = GetHrefString(i);
203
204 Controls.Add(pagingLinkButtons[i]);
205 }
206 }
207
208 /// <résumé>
209 /// Dernière page de la page d'accueil
210 /// </summary>
211 annuler AddFirstLastHyperLinks()
212 {
213 firstButton = new HyperLink();
214 firstButton.ID = "Premier" ;
215 firstButton.Text = "Accueil";
216 si(PageIndex != 0 && CalculateTotalPages() > 0)
217 {
218 firstButton.NavigateUrl = GetHrefString(0);
219 }
220 autres
221 {
222 firstButton.Enabled = faux ;
223 }
224
225 Controls.Add(firstButton);
226
227 lastButton = new HyperLink();
228 lastButton.ID = "Dernier" ;
229 lastButton.Text = "Dernière page";
230 si(PageIndex != CalculateTotalPages() - 1)
231 {
232 lastButton.NavigateUrl = GetHrefString(CalculateTotalPages() - 1);
233 }
234 autre
235 {
236 lastButton.Enabled = faux ;
237 }
238 Controls.Add(lastButton);
239 }
240
241 /// <résumé>
242 /// Page précédente Page suivante
243 /// </summary>
244 nul AddPreviousNextHyperLinks()
245 {
246 boutonPrécédent = nouveau HyperLink();
247 previousButton.ID = "Précédent";
248 previousButton.Text = "Page précédente";
249 si (HasPrevious)
250 {
251 previousButton.NavigateUrl = GetHrefString(PageIndex - 1);
252 }
253 d'autre
254 {
255 previousButton.Enabled = faux ;
256 }
257 Controls.Add(previousButton);
258
259 nextButton = new HyperLink();
260 nextButton.ID = "Suivant";
261 nextButton.Text = "Page suivante";
262 si (HasNext)
263 {
264 nextButton.NavigateUrl = GetHrefString(PageIndex + 1);
265 }
266 d'autre
267 {
268 nextButton.Enabled = faux ;
269 }
270 Controls.Add(nextButton);
271 }
272 #endregion
273
274 #region Propriétés privées
275 booléens privés HasPrécédent
276 {
277 obtenir
278 {
279 si (PageIndex > 0)
280 renvoie vrai ;
281
282 renvoie faux ;
283}
284 }
285
286 booléens privés HasNext
287 {
288 obtenir
289 {
290 si (PageIndex + 1 < CalculateTotalPages() )
291 renvoie vrai ;
292
293 renvoie faux ;
294 }
295 }
296 #endregion
297
298 Méthodes d'assistance #region et propriétés publiques
299
300 /// <résumé>
301 /// Récupère la chaîne de lien hypertexte du bouton de navigation de pagination
302 /// </summary>
303 /// <param name="pageIndex">L'index de la page correspondant au bouton de pagination</param>
304 /// <returns>Chaîne de lien hypertexte du bouton de navigation de pagination</returns>
305 chaîne privée GetHrefString(int pageIndex)
306 {
307 chaîne url = Page.Request.RawUrl ;
308
309 si (Regex.IsMatch(url, @"(d+).shtml", RegexOptions.IgnoreCase))
310 {
311 url = Regex.Replace(url, @"(d+).shtml", pageIndex + ".shtml");
312 }
313
314 si (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 si (TotalRecords == 0)
327 renvoie 0 ;
328
329 totalPagesAvailable = TotalRecords / PageSize ;
330
331 si ((TotalRecords % PageSize) > 0)
332 pages disponibles au total++ ;
333
334 renvoie le totalPagesAvailable ;
335 }
336
337 /// <résumé>
338 /// Page actuelle
339 /// </summary>
340 public int PageIndex
341 {
342 obtenir
343 {
344 int _pageIndex = 0 ;
345
346 si ((!Page.IsPostBack) && (context.PageIndex > 0))
347 _pageIndex = contexte.PageIndex;
348 autres
349 _pageIndex = Convert.ToInt32(ViewState["PageIndex"]);
350
351 si (_pageIndex < 0)
352 renvoie 0 ;
353 d'autre
354 {
355 si (_pageIndex > CalculateTotalPages()-1)
356 return CalculateTotalPages()-1;
357 autre
358 renvoie _pageIndex ;
359 }
360 }
361 ensemble
362 {
363 ViewState["PageIndex"] = valeur ;
364 }
365 }
366
367 /// <résumé>
368 ///Nombre d'enregistrements par page
369 /// </summary>
370 public int Taille de la page
371 {
372 obtenir
373 {
374 int pageSize = Convert.ToInt32(ViewState["PageSize"]);
375
376 si (pageSize == 0)
377 {
378 renvoie 10 ;
379 }
380
381 retour pageSize;
382 }
383 ensembles
384 {
385 ViewState["PageSize"] = valeur ;
386 }
387
388 }
389
390 /// <résumé>
391 ///Nombre total d'enregistrements
392 /// </summary>
393 enregistrements publics entiers TotalRecords
394 {
395 obtenir
396 {
397 return Convert.ToInt32(ViewState["TotalRecords"]);
398 }
399 ensembles
400 {
401 ViewState["TotalRecords"] = valeur ;
402 }
403 }
404
405 chaîne privée text = "Total de {0} pages" ;
406
407 chaîne privée linkCss = "";
408 /// <résumé>
409 /// Style de lien
410 /// </summary>
411 chaîne publique LinkCss
412 {
413 obtenir { return linkCss }
414 définir { linkCss = valeur ;}
415 }
416
417 chaîne privée textCss = "";
418 /// <résumé>
419 /// Style de texte
420 /// </summary>
421 chaîne publique TextCss
422 {
423 obtenir { return textCss }
424 définir { textCss = valeur ;}
425 }
426
427 chaîne publique TextFormat
428 {
429 obtenir
430 {
431 renvoie un texte ;
432 }
433 ensembles
434 {
435 texte = valeur ;
436 }
437 }
438
439 #endregion
440 }
441 }
442
Écrivez simplement ceci sur la page :
1 <%@ Langage de contrôle="c#" %>
2 <%@ Register TagPrefix="Anchor" Namespace="MyCompany.Controls" Assembly="MyCompany.Controls" %>
3 <ANCHOR:PAGER id="Pager1" runat="server"></ANCHOR:PAGER>
4