.net과 함께 제공되는 페이징 기능은 매우 엄격하고 사용자 정의가 어렵기 때문에 요구 사항을 충족할 수 없습니다. .net 페이징 제어 기능을 작성하는 데 일주일 이상이 걸렸습니다
.
1. 데이터 그리드, 데이터 목록 및 기타 유형의 데이터 표시 컨트롤을 지원합니다. 이론적으로는 데이터 소스 컨트롤이 있는 한 사용할 수 있습니다.
2. URL 페이징을 지원합니다. URL 페이징의 각 페이지는 검색 엔진으로 검색할 수 있으며 URL 재작성을 지원합니다.
3. 제어 스타일을 사용자 정의할 수 있습니다.
4. 프로그램을 사용하셨다면 코드
1 /****************************
한 줄만 작성하시면 됩니다.*************** *******************************
2 ** 파일 이름: Pager.cs
3 ** 창립자: 양샹우
4 ** 날짜: 2005년 7월 27일
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 /// </summary>
24 공개 클래스 호출기: Label, INamingContainer
25 {
26 #region 멤버 변수 및 생성자
27 HttpContext 컨텍스트 = HttpContext.Current;
28 라벨 개수라벨;
29 하이퍼링크 이전버튼;
30 하이퍼링크 nextButton;
31 하이퍼링크 firstButton;
32 하이퍼링크 lastButton;
33 하이퍼링크[] pagingLinkButtons;
34
35개의 공개 재정의 ControlCollection 컨트롤
36 {
37 얻다
38 {
39 EnacheChildControls();
40 반환 베이스.컨트롤;
41 }
42 }
43
44 보호된 재정의 void CreateChildControls()
45 {
46 컨트롤.Clear();
47
48 추가카운트라벨();
49
50 페이지버튼추가();
51
52 추가이전다음하이퍼링크();
53
54 추가첫번째마지막하이퍼링크();
55 }
56 #끝지역
57
58 #지역 렌더링 방법
59 보호된 재정의 무효 렌더링(HtmlTextWriter 작가)
60 {
61 // 수정된 총 페이지 수가 1보다 작거나 같으면 컨트롤이 표시되지 않습니다.
62 // int totalPages = CalculateTotalPages();
63 //
64 // if (전체 페이지 <= 1)
65 // 반환;
66
67 AddAttributesToRender(작가);
68
69 작가.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);
70
71 렌더카운트라벨(작성자);
72
73 RenderFirst(작성기);
74
75 렌더이전(작가);
76
77 렌더페이징버튼(작성자);
78
79 렌더다음(작성자);
80
81 렌더라스트(작성자);
82}
83
84 무효 RenderCountLabel(HtmlTextWriter 작가)
85 {
86 countLabel.RenderControl(작가);
87
88 LiteralControl l = new LiteralControl(" ");
89 l.렌더컨트롤(작성기);
90}
91
92 void RenderFirst(HtmlTextWriter 작가)
93 {
94 firstButton.RenderControl(작가);
95
96 LiteralControl l = new LiteralControl(" ");
97 l.렌더컨트롤(작가);
98 }
99
100 void RenderLast(HtmlTextWriter 작가)
101 {
102 lastButton.RenderControl(작가);
103
104 LiteralControl l = new LiteralControl(" ");
105 l.렌더컨트롤(작성자);
106 }
107
108 void RenderPrevious(HtmlTextWriter 작가)
109 {
110 이전Button.RenderControl(writer);
111
112 LiteralControl l = new LiteralControl(" ");
113 l.렌더컨트롤(작성기);
114 }
115
116 void RenderNext(HtmlTextWriter 작가)
117 {
118 nextButton.RenderControl(작성기);
119
120 LiteralControl l = new LiteralControl(" ");
121 l.렌더컨트롤(작성자);
122 }
123
124 개인 무효 RenderButtonRange(int start, int end, HtmlTextWriter 작가)
125 {
126 for (int i = 시작; i < 끝; i++)
127 {
128 if (페이지 인덱스 == i)
129 {
130 리터럴 l = 새로운 리터럴();
131 l.Text = "<글꼴 색상 =빨간색>" + (i + 1).ToString() + "</font>";
132
133 l.렌더컨트롤(작성기);
134}
그 외 135개
136 {
137 pagingLinkButtons[i].RenderControl(writer);
138 }
139 if (i < (end - 1))
140 작가.쓰기(" ");
141 }
142
143 LiteralControl l1 = new LiteralControl(" ");
144 l1.렌더컨트롤(작성기);
145 }
146
147 개인 무효 RenderPagingButtons(HtmlTextWriter 작가)
148 {
149 int total페이지;
150
151 총페이지 = CalculateTotalPages();
152
153 if (totalPages <= 10)
154 {
155 RenderButtonRange(0, totalPages, 작가);
156 }
그 외 157개
158 {
159 int lowerBound = (PageIndex - 4);
160 int upperBount = (PageIndex + 6);
161
162 if (lowerBound <= 0)
163 하한 = 0;
164
165 if (페이지 인덱스 <= 4)
166 RenderButtonRange(0, 10, 작가);
167
168 else if (PageIndex < (totalPages - 5))
169 RenderButtonRange(lowerBound, (PageIndex + 6), 작성기);
170
171 else if (PageIndex >= (totalPages - 5))
172 RenderButtonRange((totalPages - 10), totalPages, 작가);
173}
174 }
175
176 #끝지역
177
178 #지역 제어 트리 방법
179 /// <요약>
180 /// 정보 태그
181 /// </summary>
182 무효 AddCountLabel()
183 {
184 카운트라벨=새라벨();
185 카운트라벨.ID = "카운트라벨";
186 countLabel.Text = string.Format(text, CalculateTotalPages().ToString("n0"));
187
188 컨트롤.추가(countLabel);
189 }
190
191 비공개 무효 AddPageButtons()
192 {
193 pagingLinkButtons = new HyperLink[CalculateTotalPages()];
194
195(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 페이징LinkButtons[i].CssClass = linkCss;
202 pagingLinkButtons[i].NavigateUrl = GetHrefString(i);
203
204 컨트롤.추가(pagingLinkButtons[i]);
205 }
206 }
207
208 /// <요약>
209 /// 홈페이지 마지막 페이지
210 /// </summary>
211 void AddFirstLastHyperLinks()
212 {
213 firstButton = 새 하이퍼링크();
214 firstButton.ID = "첫 번째";
215 firstButton.Text = "홈";
216 if(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 if(PageIndex != CalculateTotalPages() - 1)
231 {
232 lastButton.NavigateUrl = GetHrefString(CalculateTotalPages() - 1);
233 }
그 외 234개
235 {
236 lastButton.Enabled = 거짓;
237 }
238 컨트롤.추가(마지막버튼);
239 }
240
241 /// <요약>
242 /// 이전 페이지 다음 페이지
243 /// </summary>
244 무효 AddPreviousNextHyperLinks()
245 {
246 이전버튼 = new HyperLink();
247 이전버튼.ID = "이전";
248 PreviousButton.Text = "이전 페이지";
249 if (이전 있음)
250 {
251 이전Button.NavigateUrl = GetHrefString(PageIndex - 1);
252 }
그 외 253개
254 {
255 이전버튼.활성화 = false;
256 }
257 컨트롤.추가(이전버튼);
258
259 nextButton = 새 하이퍼링크();
260 nextButton.ID = "다음";
261 nextButton.Text = "다음 페이지";
262 만약(HasNext)
263 {
264 nextButton.NavigateUrl = GetHrefString(PageIndex + 1);
265 }
그 외 266개
267 {
268 nextButton.Enabled = 거짓;
269 }
270 컨트롤.추가(nextButton);
271 }
272 #끝지역
273
274 #region 사유 재산
275 개인 bool HasPrevious
276 {
277 얻다
278 {
279 if (페이지 인덱스 > 0)
280은 true를 반환합니다.
281
282 거짓을 반환;
283}
284 }
285
286 개인 bool HasNext
287 {
288 얻다
289 {
290 if (PageIndex + 1 < CalculateTotalPages() )
291은 true를 반환합니다.
292
293 거짓을 반환;
294 }
295 }
296 #끝지역
297
298 #region 도우미 메서드 및 공용 속성
299
300 /// <요약>
301 /// 페이징 탐색 버튼의 하이퍼링크 문자열을 가져옵니다.
302 /// </summary>
303 /// <param name="pageIndex">페이징 버튼에 해당하는 페이지 인덱스</param>
304 /// <returns>페이징 탐색 버튼의 하이퍼링크 문자열</returns>
305 비공개 문자열 GetHrefString(int pageIndex)
306 {
307 문자열 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 공개 int CalculateTotalPages()
323 {
324 int totalPagesAvailable;
325
326 if (TotalRecords == 0)
327 0을 반환합니다.
328
329 totalPagesAvailable = 총레코드수 / 페이지크기;
330
331 if ((TotalRecords % PageSize) > 0)
332 총페이지 사용 가능++;
333
334 totalPagesAvailable을 반환합니다.
335 }
336
337 /// <요약>
338 /// 현재 페이지
339 /// </summary>
340 공개 정수 PageIndex
341 {
342 얻다
343 {
344 int _pageIndex = 0;
345
346 if ((!Page.IsPostBack) && (context.PageIndex > 0))
347 _페이지인덱스 = 컨텍스트.페이지인덱스;
그 외 348개
349 _pageIndex = Convert.ToInt32(ViewState["PageIndex"]);
350
351 if (_pageIndex < 0)
352 0을 반환합니다.
그 외 353개
354 {
355 if (_pageIndex > CalculateTotalPages()-1)
356 CalculateTotalPages()-1을 반환합니다.
357 그밖에
358 _pageIndex 반환;
359 }
360 }
361 세트
362 {
363 ViewState["PageIndex"] = 값;
364 }
365 }
366
367 /// <요약>
368 ///페이지당 레코드 수
369 /// </summary>
370 공개 정수 페이지 크기
371 {
372 얻다
373 {
374 int pageSize = Convert.ToInt32(ViewState["PageSize"]);
375
376 if (페이지 크기 == 0)
377 {
378 10을 반환합니다.
379 }
380
381 반환 페이지 크기;
382 }
383세트
384 {
385 ViewState["페이지 크기"] = 값;
386 }
387
388 }
389
390 /// <요약>
391 ///총 레코드 수
392 /// </summary>
393 공개 정수 TotalRecords
394 {
395 얻다
396 {
397 return Convert.ToInt32(ViewState["TotalRecords"]);
398 }
399세트
400 {
401 ViewState["TotalRecords"] = 값;
402 }
403 }
404
405 개인 문자열 텍스트 = "총 {0} 페이지";
406
407 비공개 문자열 linkCss = "";
408 /// <요약>
409 /// 링크 스타일
410 /// </summary>
411 공개 문자열 LinkCss
412 {
413 get { 링크Css 반환 }
414 세트 { linkCss = 값;}
415 }
416
417 개인 문자열 textCss = "";
418 /// <요약>
419 /// 텍스트 스타일
420 /// </summary>
421 공개 문자열 TextCss
422 {
423 get { return textCss }
424 세트 { textCss = 값;}
425 }
426
427 공개 문자열 TextFormat
428 {
429 얻다
430 {
431 반환 텍스트;
432 }
433세트
434 {
435 텍스트 = 값;
436 }
437 }
438
439 #끝지역
440 }
441 }
442
페이지에 이렇게 적어보세요:
1 <%@ 제어 언어="c#" %>
2 <%@ TagPrefix="Anchor" Namespace="MyCompany.Controls" Assembly="MyCompany.Controls" %> 등록
3 <ANCHOR:PAGER id="Pager1" runat="server"></ANCHOR:PAGER>
4