今天增强了一下AspNetPager控件
在分页设置的时候发现http://www.webdiyer.com/ 写的分页控件实在是好用,而且是开源的,真是佩服呀,一直没有机会感谢一下,使用了很久,这次客户提了一些需求正好安排一天时间改进了一下,也是很不错的。
说明:增强的了内容是在4.3.3的版本基本上进行修改的。只是简单的测试版,我只发了几个小时的时间修改的。还没有经过严格的测试,如果大家发现有什么问题,请回复,谢谢
1
//AspNetPager分页控件源代码:
2
//版权所有:陕西省吴旗县 Webdiyer(yhaili@21cn.com)(Web site: www.webdiyer.com);
3
//此源代码仅供学习参考,不得用作任何商业用途;
4
//若需修改并重新编译该控件,请保留完整的源代码的版权信息!
5
//有关控件升级及新控件发布信息,请留意 www.webdiyer.com 。
6
//版本4.3.3
7
//增强版 (修改自4.3.3版本)
8
//描述:增加了可自定义每页的记录数。
9
//modify by liubiqu(liubiqu@sina.com) [http://www.cnblogs.com/liubiqu]
10
//DateTime: 2005-06-10
11
12
using System;
13
using System.Collections;
14
using System.Collections.Specialized;
15
using System.ComponentModel;
16
using System.IO;
17
using System.Text;
18
using System.Web.UI;
19
using System.Web.UI.Design.WebControls;
20
using System.Web.UI.WebControls;
21
22
namespace EOffice.Components
23
{
24
#region AspNetPager Server Control
25
26
#region 控件说明及示例
27
/// <summary>
28
/// 用于ASP.NET Web应用程序中对数据进行分页的的服务器控件。
29
/// </summary>
30
/// <remarks>不同于DataGrid控件,AspNetPager分页控件本身并不显示任何数据,而只显示页导航元素,数据在页面上的显示方式与该控件无关。该控件可以为DataGrid、DataList、Repeater以及自定义控件进行分页,配合Sql存储过程,分页性能较使用DataGrid分页有明显提升,尤其是当数据量大时性能可提升数倍!
31
/// <p>AspNetPager 2.0 中新增了通过Url来分页的功能,这使得访问者可以直接输入相应的Url来访问任何页面,并且搜索引擎也可以直接检索每个页面,若使用DataGrid的分页功能,这是无法实现的。</p>
32
/// <p>要使用 AspNetPager 分页控件,必须最少指定它的 <see cref="RecordCount"/> 属性,指定并编写 <see cref="PageChanged"/> 事件的处理程序。
33
/// <see cref="RecordCount"/> 属性指定要分页的所有数据的总项数,若未指定该值或该值小于等于 <see cref="PageSize"/> ,则AspNetPager控件不会显示任何内容。
34
/// 若未指定并编写 <see cref="PageChanged"/> 事件处理程序,则当用户点击页导航元素或在页索引文本框中手式输入页索引并提交时AspNetPager不会跳转到指定的页。
35
/// AspNetPager控件的分页方法和DataGrid基本相同,即在它的 <see cref="PageChanged"/> 事件处理程序中将传递事件数据的 <see cref="PageChangedEventArgs"/> 的 <see cref="PageChangedEventArgs.NewPageIndex"/>值赋给 AspNetPager的 <see cref="CurrentPageIndex"/>属性,然后重新将新的数据与数据显示控件绑定。 </p></remarks>
36
/// <example>以下示例说明如何用AspNetPager对DataGrid进行分页。
37
/// <code><![CDATA[
38
///<%@ Page Language="C#"%>
39
///<%@ Import Namespace="System.Data"%>
40
///<%@Import Namespace="System.Data.SqlClient"%>
41
///<%@Import Namespace="System.Configuration"%>
42
///<%@Register TagPrefix="Webdiyer" Namespace="Wuqi.Webdiyer" Assembly="aspnetpager"%>
43
///<HTML>
44
///<HEAD>
45
///<TITLE>Welcome to Webdiyer.com </TITLE>
46
/// <script runat="server">
47
/// SqlConnection conn;
48
/// SqlCommand cmd;
49
/// void Page_Load(object src,EventArgs e)
50
/// {
51
/// conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);
52
/// if(!Page.IsPostBack)
53
/// {
54
/// cmd=new SqlCommand("GetNews",conn);
55
/// cmd.CommandType=CommandType.StoredProcedure;
56
/// cmd.Parameters.Add("@pageindex",1);
57
/// cmd.Parameters.Add("@pagesize",1);
58
/// cmd.Parameters.Add("@docount",true);
59
/// conn.Open();
60
/// pager.RecordCount=(int)cmd.ExecuteScalar();
61
/// conn.Close();
62
/// BindData();
63
/// }
64
/// }
65
///
66
/// void BindData()
67
/// {
68
/// cmd=new SqlCommand("GetNews",conn);
69
/// cmd.CommandType=CommandType.StoredProcedure;
70
/// cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);
71
/// cmd.Parameters.Add("@pagesize",pager.PageSize);
72
/// cmd.Parameters.Add("@docount",false);
73
/// conn.Open();
74
/// dataGrid1.DataSource=cmd.ExecuteReader();
75
/// dataGrid1.DataBind();
76
/// conn.Close();
77
/// pager.CustomInfoText="记录总数:<font color=\"blue\"><b>"+pager.RecordCount.ToString()+"</b></font>";
78
/// pager.CustomInfoText+=" 总页数:<font color=\"blue\"><b>"+pager.PageCount.ToString()+"</b></font>";
79
/// pager.CustomInfoText+=" 当前页:<font color=\"red\"><b>"+pager.CurrentPageIndex.ToString()+"</b></font>";
80
/// }
81
/// void ChangePage(object src,PageChangedEventArgs e)
82
/// {
83
/// pager.CurrentPageIndex=e.NewPageIndex;
84
/// BindData();
85
/// }
86
/// </script>
87
/// <meta http-equiv="Content-Language" content="zh-cn">
88
/// <meta http-equiv="content-type" content="text/html;charset=gb2312">
89
/// <META NAME="Generator" CONTENT="EditPlus">
90
/// <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">
91
/// </HEAD>
92
/// <body>
93
/// <form runat="server" ID="Form1">
94
/// <asp:DataGrid id="dataGrid1" runat="server" />
95
///
96
/// <Webdiyer:AspNetPager id="pager"
97
/// runat="server"
98
/// PageSize="8"
99
/// NumericButtonCount="8"
100
/// ShowCustomInfoSection="left"
101
/// PagingButtonSpacing="0"
102
/// ShowInputBox="always"
103
/// CssClass="mypager"
104
/// HorizontalAlign="right"
105
/// OnPageChanged="ChangePage"
106
/// SubmitButtonText="转到"
107
/// NumericButtonTextFormatString="[{0}]"/>
108
///
109
/// </form>
110
/// </body>
111
///</HTML>
112
/// ]]>
113
/// </code>
114
/// <p>下面是该示例所用的Sql Server存储过程:</p>
115
/// <code>
116
/// <![CDATA[
117
///CREATE procedure GetNews
118
/// (@pagesize int,
119
/// @pageindex int,
120
/// @docount bit)
121
/// as
122
/// set nocount on
123
/// if(@docount=1)
124
/// select count(id) from news
125
/// else
126
/// begin
127
/// declare @indextable table(id int identity(1,1),nid int)
128
/// declare @PageLowerBound int
129
/// declare @PageUpperBound int
130
/// set @PageLowerBound=(@pageindex-1)*@pagesize
131
/// set @PageUpperBound=@PageLowerBound+@pagesize
132
/// set rowcount @PageUpperBound
133
/// insert into @indextable(nid) select id from news order by addtime desc
134
/// select O.id,O.source,O.title,O.addtime from news O,@indextable t where O.id=t.nid
135
/// and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
136
/// end
137
/// set nocount off
138
///GO
139
/// ]]>
140
/// </code></example>
141
#endregion
142
143
[DefaultProperty("PageSize")]
144
[DefaultEvent("PageChanged")]
145
[ParseChildren(false)]
146
[PersistChildren(false)]
147
[Description("专用于ASP.Net Web应用程序的分页控件")]
148
[Designer(typeof(PagerDesigner))]
149
[ToolboxData("<{0}:AspNetPager runat=server></{0}:AspNetPager>")]
150
public class AspNetPager:Panel,INamingContainer,IPostBackEventHandler,IPostBackDataHandler
151
{
152
private string cssClassName;
153
private string urlPageIndexName="page";
154
private string urlPageSize = "pagesize";//TODO:var urlPageSize add by liubiqu 2005-6-10
155
private bool urlPaging=false;
156
private string inputPageIndex;
157
private string selectPageSize; //TODO:var selectPageSize add by liubiqu 2005-6-10
158
private string currentUrl=null;
159
private NameValueCollection urlParams=null;
160
161
#region Properties
162
163
#region Navigation Buttons
164
165
/// <summary>
166
/// 获取或设置一个值,该值批示当鼠标指针悬停在导航按钮上时是否显示工具提示。
167
/// </summary>
168
[Browsable(true),
169
Category("导航按钮"),
170
DefaultValue(true),
171
Description("指定当鼠标停留在导航按钮上时,是否显示工具提示")]
172
public bool ShowNavigationToolTip
173
{
174
get
175
{
176
object obj=ViewState["ShowNavigationToolTip"];
177
return (obj==null)?true:(bool)obj;
178
}
179
set
180
{
181
ViewState["ShowNavigationToolTip"]=value;
182
}
183
}
184
185
/// <summary>
186
/// 获取或设置导航按钮工具提示文本的格式。
187
/// </summary>
188
[Browsable(true),
189
Category("导航按钮"),
190
DefaultValue("转到第{0}页"),
191
Description("页导航按钮工具提示文本的格式")]
192
public string NavigationToolTipTextFormatString
193
{
194
get
195
{
196
object obj=ViewState["NavigationToolTipTextFormatString"];
197
return (obj==null)?"转到第{0}页":(string)obj;
198
}
199
set
200
{
201
string tip=value;
202
if(tip.Trim().Length<1&&tip.IndexOf("{0}")<0)
203
tip="{0}";
204
ViewState["NavigationToolTipTextFormatString"]=tip;
205
}
206
}
207
208
/// <summary>
209
/// 获取或设置一个值,该值指示是否将页索引按钮用中文数字代替。
210
/// </summary>
211
/// <remarks>
212
/// 将该值设为true并且未使用图片按钮时,页索引按钮中的数值1、2、3等将会被中文字符一、二、三等代替。
213
/// </remarks>
214
[Browsable(true),
215
Category("导航按钮"),
216
DefaultValue(false),
217
Description("是否将页索引数值按钮用中文数字一、二、三等代替")]
218
public bool ChinesePageIndex
219
{
220
get
221
{
222
object obj=ViewState["ChinesePageIndex"];
223
return (obj==null)?false:(bool)obj;
224
}
225
set
226
{
227
ViewState["ChinesePageIndex"]=value;
228
}
229
}
230
231
/// <summary>
232
/// 获取或设置页索引数值导航按钮上文字的显示格式。
233
/// </summary>
234
/// <value>
235
/// 字符串,指定页索引数值按钮上文字的显示格式,默认值为<see cref="String.Empty"/>,即未设置该属性。</value>
236
/// <remarks>
237
/// 使用NumericButtonTextFormatString属性指定页索引数值按钮的显示格式,如未设置该值时索引按钮文本将会是:1 2 3
,设置该值将改变索引按钮文本的显示格式,
238
/// 如将该值设为“[{0}]”则索引文本会显示为:[1] [2] [3]
,将该值设为“-{0}-”则会使索引文本变为:-1- -2- -3-
。
239
/// </remarks>
240
[Browsable(true),
241
DefaultValue(""),
242
Category("导航按钮"),
243
Description("页索引数值按钮上文字的显示格式")]
244
public string NumericButtonTextFormatString
245
{
246
get
247
{
248
object obj=ViewState["NumericButtonTextFormatString"];
249
return (obj==null)?String.Empty:(string)obj;
250
}
251
set
252
{
253
ViewState["NumericButtonTextFormatString"]=value;
254
}
255
}
256
257
/// <summary>
258
/// 获取或设置分页导航按钮的类型,即使用文字还是图片。
259
/// </summary>
260
/// <remarks>
261
/// 要使用图片按钮,您需要准备以下图片:从0到9的十个数值图片(当ShowPageIndex设为true时),第一页、上一页、下一页、最后一页及更多页(
)五个按钮图片(当ShowFirstLast及ShowPrevNext都设为true时),
262
/// 若需要使当前页索引的数值按钮不同于别的页索引数值按钮,则还需准备当前页索引的按钮图片;
263
/// 若需要使已禁用的第一页、上一页、下一页及最后一页按钮图片不同于正常的按钮图片,则还需准备这四个按钮在禁用状态下的图片;
264
/// <p><b>图片文件的命名规则如下:</b></p>
265
/// <p>从0到9十张数值按钮图片必须命名为“数值+ButtonImageNameExtension+ButtonImageExtension”,其中的ButtonImageNameExtension可以不用设置,
266
/// ButtonImageExtension是图片文件的后缀名,如 .gif或 .jpg等可以在浏览器中显示的任何图片文件类型。如页索引“1”的图片文件可命名为“1.gif”或“1.jpg”,
267
/// 当您有两套或更多套图片文件时,可以通过指定ButtonImageNameExtension属性值来区分不同套的图片,如第一套图片可以不用设ButtonImageNameExtension,则图片文件名类似于“1.gif”、“2.gif”等等,而第二套图片则设置ButtonImageNameExtension为“f”,图片文件名类似于“1f.gif”,“2f.gif”等等。</p>
268
/// <p>第一页按钮的图片文件名以“first”开头,上一页按钮图片名以“prev”开头,下一页按钮图片名以“next”开头,最后一页按钮图片名以“last”开头,更多页按钮图片名以“more”开头,是否使用ButtonImageNameExtension取决于数值按钮的设置及是否有更多套图片。</p>
269
/// </remarks>
270
/// <example>
271
/// 以下代码片段示例如果使用图片按钮:
272
/// <p>
273
/// <code><![CDATA[
274
/// <Webdiyer:AspNetPager runat="server"
275
/// id="pager1"
276
/// OnPageChanged="ChangePage"
277
/// PagingButtonType="image"
278
/// ImagePath="images"
279
/// ButtonImageNameExtension="n"
280
/// DisabledButtonImageNameExtension="g"
281
/// ButtonImageExtension="gif"
282
/// CpiButtonImageNameExtension="r"
283
/// PagingButtonSpacing=5/>
284
/// ]]>
285
/// </code>
286
/// </p>
287
/// </example>
288
[Browsable(true),
289
DefaultValue(PagingButtonType.Text),
290
Category("导航按钮"),
291
Description("分页导航按钮的类型,是使用文字还是图片")]
292
public PagingButtonType PagingButtonType
293
{
294
get
295
{
296
object obj=ViewState["PagingButtonType"];
297
return (obj==null)?PagingButtonType.Text:(PagingButtonType)obj;
298
}
299
set
300
{
301
ViewState["PagingButtonType"]=value;
302
}
303
}
304
305
/// <summary>
306
/// 获取或设置页导航数值按钮的类型,该值仅当PagingButtonType设为Image时才有效。
307
/// </summary>
308
/// <remarks>
309
/// 当您将PagingButtonType设为Image当又不想让页索引数值按钮使用图片时,可以将该值设为Text,这会使页索引数据按钮使用文本而不是图片按钮。
310
/// </remarks>
311
[Browsable(true),
312
DefaultValue(PagingButtonType.Text),
313
Category("导航按钮"),
314
Description("页导航数值按钮的类型")]
315
public PagingButtonType NumericButtonType
316
{
317
get
318
{
319
object obj=ViewState["NumericButtonType"];
320
return (obj==null)?PagingButtonType:(PagingButtonType)obj;
321
}
322
set
323
{
324
ViewState["NumericButtonType"]=value;
325
}
326
}
327
328
/// <summary>
329
/// 获取或设置第一页、上一页、下一页和最后一页按钮的类型,该值仅当PagingButtonType设为Image时才有效。
330
/// </summary>
331
/// <remarks>
332
/// 当您将PagingButtonType设为Image但又不想让第一页、下一页、下一页和最后一页按钮使用图片,则可以将该值设为Text,这会使前面的四个按钮使用文本而不是图片按钮。
333
/// </remarks>
334
[Browsable(true),
335
Category("导航按钮"),
336
DefaultValue(PagingButtonType.Text),
337
Description("第一页、上一页、下一页和最后一页按钮的类型")]
338
public PagingButtonType NavigationButtonType
339
{
340
get
341
{
342
object obj=ViewState["NavigationButtonType"];
343
return (obj==null)?PagingButtonType:(PagingButtonType)obj;
344
}
345
set
346
{
347
ViewState["NavigationButtonType"]=value;
348
}
349
}
350
351
/// <summary>
352
/// 获取或设置“更多页”(
)按钮的类型,该值仅当PagingButtonType设为Image时才有效。
353
/// </summary>
354
/// <remarks>
355
/// 当您将PagingButtonType设为Image但又不想让更多页(
)按钮使用图片时,可以将此值设为Text,这会使更多页按钮使用文本而不是图片按钮。
356
/// </remarks>
357
[Browsable(true),
358
Category("导航按钮"),
359
DefaultValue(PagingButtonType.Text),
360
Description("“更多页”(
)按钮的类型")]
361
public PagingButtonType MoreButtonType
362
{
363
get
364
{
365
object obj=ViewState["MoreButtonType"];
366
return (obj==null)?PagingButtonType:(PagingButtonType)obj;
367
}
368
set
369
{
370
ViewState["MoreButtonType"]=value;
371
}
372
}
373
374
/// <summary>
375
/// 获取或设置分页导航按钮之间的间距。
376
/// </summary>
377
[Browsable(true),
378
Category("导航按钮"),
379
DefaultValue(typeof(Unit),"5px"),
380
Description("分页导航按钮之间的间距")]
381
public Unit PagingButtonSpacing
382
{
383
get
384
{
385
object obj=ViewState["PagingButtonSpacing"];
386
return (obj==null)?Unit.Pixel(5):(Unit.Parse(obj.ToString()));
387
}
388
set
389
{
390
ViewState["PagingButtonSpacing"]=value;
391
}
392
}
393
394
/// <summary>
395
/// 获取或设置一个值,该值指示是否在页导航元素中显示第一页和最后一页按钮。
396
/// </summary>
397
[Browsable(true),
398
Description("是否在页导航元素中显示第一页和最后一页按钮"),
399
Category("导航按钮"),
400
DefaultValue(true)]
401
public bool ShowFirstLast
402
{
403
get
404
{
405
object obj=ViewState["ShowFirstLast"];
406
return (obj==null)?true:(bool)obj;
407
}
408
set{ViewState["ShowFirstLast"]=value;}
409
}
410
411
/// <summary>
412
/// 获取或设置一个值,该值指示是否在页导航元素中显示上一页和下一页按钮。
413
/// </summary>
414
[Browsable(true),
415
Description("是否在页导航元素中显示上一页和下一页按钮"),
416
Category("导航按钮"),
417
DefaultValue(true)]
418
public bool ShowPrevNext
419
{
420
get
421
{
422
object obj=ViewState["ShowPrevNext"];
423
return (obj==null)?true:(bool)obj;
424
}
425
set{ViewState["ShowPrevNext"]=value;}
426
}
427
428
/// <summary>
429
/// 获取或设置一个值,该值指示是否在页导航元素中显示页索引数值按钮。
430
/// </summary>
431
[Browsable(true),
432
Description("是否在页导航元素中显示数值按钮"),
433
Category("导航按钮"),
434
DefaultValue(true)]
435
public bool ShowPageIndex
436
{
437
get
438
{
439
object obj=ViewState["ShowPageIndex"];
440
return (obj==null)?true:(bool)obj;
441
}
442
set{ViewState["ShowPageIndex"]=value;}
443
}
444
445
/// <summary>
446
/// 获取或设置为第一页按钮显示的文本。
447
/// </summary>
448
[Browsable(true),
449
Description("第一页按钮上显示的文本"),
450
Category("导航按钮"),
451
DefaultValue("<font face=\"webdings\">9</font>")]
452
public string FirstPageText
453
{
454
get
455
{
456
object obj=ViewState["FirstPageText"];
457
return (obj==null)?"<font face=\"webdings\">9</font>":(string)obj;
458
}
459
set{ViewState["FirstPageText"]=value;}
460
}
461
462
/// <summary>
463
/// 获取或设置为上一页按钮显示的文本。
464
/// </summary>
465
[Browsable(true),
466
Description("上一页按钮上显示的文本"),
467
Category("导航按钮"),
468
DefaultValue("<font face=\"webdings\">3</font>")]
469
public string PrevPageText
470
{
471
get
472
{
473
object obj=ViewState["PrevPageText"];
474
return (obj==null)?"<font face=\"webdings\">3</font>":(string)obj;
475
}
476
set{ViewState["PrevPageText"]=value;}
477
}
478
479
/// <summary>
480
/// 获取或设置为下一页按钮显示的文本。
481
/// </summary>
482
[Browsable(true),
483
Description("下一页按钮上显示的文本"),
484
Category("导航按钮"),
485
DefaultValue("<font face=\"webdings\">4</font>")]
486
public string NextPageText
487
{
488
get
489
{
490
object obj=ViewState["NextPageText"];
491
return (obj==null)?"<font face=\"webdings\">4</font>":(string)obj;
492
}
493
set{ViewState["NextPageText"]=value;}
494
}
495
496
/// <summary>
497
/// 获取或设置为最后一页按钮显示的文本。
498
/// </summary>
499
[Browsable(true),
500
Description("最后一页按钮上显示的文本"),
501
Category("导航按钮"),
502
DefaultValue("<font face=\"webdings\">:</font>")]
503
public string LastPageText
504
{
505
get
506
{
507
object obj=ViewState["LastPageText"];
508
return (obj==null)?"<font face=\"webdings\">:</font>":(string)obj;
509
}
510
set{ViewState["LastPageText"]=value;}
511
}
512
513
/// <summary>
514
/// 获取或设置在 <see cref="AspNetPager"/> 控件的页导航元素中同时显示的数值按钮的数目。
515
/// </summary>
516
[Browsable(true),
517
Description("要显示的页索引数值按钮的数目"),
518
Category("导航按钮"),
519
DefaultValue(10)]
520
public int NumericButtonCount
521
{
522
get
523
{
524
object obj=ViewState["NumericButtonCount"];
525
return (obj==null)?10:(int)obj;
526
}
527
set{ViewState["NumericButtonCount"]=value;}
528
}
529
530
/// <summary>
531
/// 获取或设置一个值,该值指定是否显示已禁用的按钮。
532
/// </summary>
533
/// <remarks>
534
/// 该值用来指定是否显示已禁用的分页导航按钮,当当前页为第一页时,第一页和上一页按钮将被禁用,当当前页为最后一页时,下一页和最后一页按钮将被禁用,被禁用的按钮没有链接,在按钮上点击也不会有任何作用。
535
/// </remarks>
536
[Browsable(true),
537
Category("导航按钮"),
538
Description("是否显示已禁用的按钮"),
539
DefaultValue(true)]
540
public bool ShowDisabledButtons
541
{
542
get
543
{
544
object obj=ViewState["ShowDisabledButtons"];
545
return (obj==null)?true:(bool)obj;
546
}
547
set
548
{
549
ViewState["ShowDisabledButtons"]=value;
550
}
551
}
552
553
#endregion
554
555
#region Image Buttons
556
557
/// <summary>
558
/// 获取或设置当使用图片按钮时,图片文件的路径。
559
/// </summary>
560
[Browsable(true),
561
Category("图片按钮"),
562
Description("当使用图片按钮时,指定图片文件的路径"),
563
DefaultValue(null)]
564
public string ImagePath
565
{
566
get
567
{
568
string imgPath=(string)ViewState["ImagePath"];
569
if(imgPath!=null)
570
imgPath=this.ResolveUrl(imgPath);
571
return imgPath;
572
}
573
set
574
{
575
string imgPath=value.Trim().Replace("\\","/");
576
ViewState["ImagePath"]=(imgPath.EndsWith("/"))?imgPath:imgPath+"/";
577
}
578
}
579
580
/// <summary>
581
/// 获取或设置当使用图片按钮时,图片的类型,如gif或jpg,该值即图片文件的后缀名。
582
/// </summary>
583
[Browsable(true),
584
Category("图片按钮"),
585
DefaultValue(".gif"),
586
Description("当使用图片按钮时,图片的类型,如gif或jpg,该值即图片文件的后缀名")]
587
public string ButtonImageExtension
588
{
589
get
590
{
591
object obj=ViewState["ButtonImageExtension"];
592
return (obj==null)?".gif":(string)obj;
593
}
594
set
595
{
596
string ext=value.Trim();
597
ViewState["ButtonImageExtension"]=(ext.StartsWith("."))?ext:("."+ext);
598
}
599
}
600
601
/// <summary>
602
/// 获取或设置自定义图片文件名的后缀字符串,以区分不同类型的按钮图片。
603
/// </summary>
604
/// <remarks><note>注意:</note>该值不是文件后缀名,而是为区分不同的图片文件而在图片名中加入的字符串,如:
605
/// 当前有两套按钮图片,其中一套中的“1”的图片名可为“1f.gif”,另一套中的“1”的图片名可起为“1n.gif”,其中的f和n即为ButtonImageNameExtension。</remarks>
606
[Browsable(true),
607
DefaultValue(null),
608
Category("图片按钮"),
609
Description("自定义图片文件名的后缀字符串(非文件后缀名),如图片“1f.gif”的ButtonImageNameExtension即为“f”")]
610
public string ButtonImageNameExtension
611
{
612
get
613
{
614
return (string)ViewState["ButtonImageNameExtension"];
615
}
616
set
617
{
618
ViewState["ButtonImageNameExtension"]=value;
619
}
620
}
621
622
/// <summary>
623
/// 获取或设置当前页索引按钮的图片名后缀。
624
/// </summary>
625
/// <remarks>
626
/// 当 <see cref="PagingButtonType"/> 设为 Image 时,该属性允许您设置当前页索引数值按钮使用的图片名后缀字符,因此可以使当前页索引按钮与其它页索引按钮使用不同的图片,若未设置该值,则默认值为<see cref="ButtonImageNameExtension"/>,即当前页索引按钮与其它页索引按钮使用相同的图片。
627
/// </remarks>
628
[Browsable(true),
629
DefaultValue(null),
630
Category("图片按钮"),
631
Description("当前页索引按钮的图片名后缀字符串")]
632
public string CpiButtonImageNameExtension
633
{
634
get
635
{
636
object obj=ViewState["CpiButtonImageNameExtension"];
637
return (obj==null)?ButtonImageNameExtension:(string)obj;
638
}
639
set
640
{
641
ViewState["CpiButtonImageNameExtension"]=value;
642
}
643
}
644
645
/// <summary>
646
/// 获取或设置已禁用的页导航按钮图片名后缀字符串。
647
/// </summary>
648
/// <remarks>
649
/// 当 <see cref="PagingButtonType"/> 设为 Image 时, 该值允许您设置已禁用(即没有链接,因而点击后无反应)的页导航按钮(包括第一页、上一页、下一页、最后一页四个按钮)的图片文件名后缀字符串,因此可以使已禁用的页导航按钮不同于正常的页导航按钮。若未设置该值,则默认值为<see cref="ButtonImageNameExtension"/>,即已禁用的页导航按钮与正常的页导航按钮使用相同的图片。
650
/// </remarks>
651
[Browsable(true),
652
DefaultValue(null),
653
Category("图片按钮"),
654
Description("已禁用的页导航按钮的图片名后缀字符串")]
655
public string DisabledButtonImageNameExtension
656
{
657
get
658
{
659
object obj=ViewState["DisabledButtonImageNameExtension"];
660
return (obj==null)?ButtonImageNameExtension:(string)obj;
661
}
662
set
663
{
664
ViewState["DisabledButtonImageNameExtension"]=value;
665
}
666
}
667
/// <summary>
668
/// 指定当使用图片按钮时,图片的对齐方式。
669
/// </summary>
670
671
[Browsable(true),
672
Description("指定当使用图片按钮时,图片的对齐方式"),
673
DefaultValue(ImageAlign.Baseline),
674
Category("图片按钮")]
675
public ImageAlign ButtonImageAlign
676
{
677
get
678
{
679
object obj=ViewState["ButtonImageAlign"];
680
return (obj==null)?ImageAlign.Baseline:(ImageAlign)obj;
681
}
682
set{ViewState["ButtonImageAlign"]=value;}
683
}
684
685
686
#endregion
687
688
#region Paging
689
690
/// <summary>
691
/// 获取或设置是否启用url来传递分页信息。
692
/// </summary>
693
/// <remarks>
694
/// 启用Url分页方式是将用户欲访问的页索引通过Url来传递,由于该分页方式不使用页面向自身回发来传递数据,
695
/// 所以每次分页时所有的数据都恢复为初始值或需要重新获取。使用Url分页方式不支持动态改变分页控件的属性值,
696
/// 因暂时无法将新的属性值通过Url来传递给下一页。
697
/// </remarks>
698
/// <example>以下示例说明如何用AspNetPager的Url分页方式对DataGrid进行分页(使用Access数据库):
699
/// <code><![CDATA[
700
///<%@Register TagPrefix="Webdiyer" Namespace="Wuqi.Webdiyer" Assembly="aspnetpager"%>
701
///<%@Import Namespace="System.Data.OleDb"%>
702
///<%@ Import Namespace="System.Data"%>
703
///<%@ Page Language="C#" debug=true%>
704
///<HTML>
705
/// <HEAD>
706
/// <TITLE>Welcome to Webdiyer.com </TITLE>
707
/// <script runat="server">
708
/// OleDbConnection conn;
709
/// OleDbCommand cmd;
710
/// void Page_Load(object src,EventArgs e){
711
/// conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("access/aspnetpager.mdb"));
712
/// if(!Page.IsPostBack){
713
/// cmd=new OleDbCommand("select count(newsid) from wqnews",conn);
714
/// conn.Open();
715
/// pager.RecordCount=(int)cmd.ExecuteScalar();
716
/// conn.Close();
717
/// BindData();
718
/// }
719
/// }
720
///
721
/// void BindData(){
722
/// cmd=new OleDbCommand("select newsid,heading,source,addtime from wqnews order by addtime desc",conn);
723
/// OleDbDataAdapter adapter=new OleDbDataAdapter(cmd);
724
/// DataSet ds=new DataSet();
725
/// adapter.Fill(ds,pager.PageSize*(pager.CurrentPageIndex-1),pager.PageSize,"news");
726
/// dg.DataSource=ds.Tables["news"];
727
/// dg.DataBind();
728
/// }
729
///
730
/// void ChangePage(object src,PageChangedEventArgs e){
731
/// pager.CurrentPageIndex=e.NewPageIndex;
732
/// BindData();
733
/// }
734
///
735
/// </script>
736
/// <meta http-equiv="Content-Language" content="zh-cn">
737
/// <meta http-equiv="content-type" content="text/html;charset=gb2312">
738
/// <META NAME="Generator" CONTENT="EditPlus">
739
/// <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">
740
/// </HEAD>
741
/// <body>
742
/// <form runat="server" ID="Form1">
743
/// <h2 align="center">AspNetPager分页示例</h2>
744
/// <asp:DataGrid id="dg" runat="server"
745
/// Width="760" CellPadding="4" Align="center" />
746
///
747
/// <Webdiyer:AspNetPager runat="server" id="pager"
748
/// OnPageChanged="ChangePage"
749
/// HorizontalAlign="center"
750
/// style="MARGIN-TOP:10px;FONT-SIZE:16px"
751
/// PageSize="8"
752
/// ShowInputBox="always"
753
/// SubmitButtonStyle="border:1px solid #000066;height:20px;width:30px"
754
/// InputBoxStyle="border:1px #0000FF solid;text-align:center"
755
/// SubmitButtonText="转到"
756
/// UrlPaging="true"
757
/// UrlPageIndexName="pageindex" />
758
/// </form>
759
/// </body>
760
///</HTML>
761
/// ]]></code>
762
/// </example>
763
[Browsable(true),
764
Category("分页"),
765
DefaultValue(false),
766
Description("是否使用url传递分页信息的方式来分页")]
767
public bool UrlPaging
768
{
769
get
770
{
771
return urlPaging;
772
}
773
set
774
{
775
urlPaging=value;
776
}
777
}
778
779
/// <summary>
780
/// 获取或设置当启用Url分页方式时,在url中表示要传递的页索引的参数的名称。
781
/// </summary>
782
/// <remarks>
783
/// 该属性允许您自定义通过Url传递页索引时表示要传递的页索引的参数的名称,以避免与现有的参数名重复。
784
/// <p>该属性的默认值是“page”,即通过Url分页时,显示在浏览器地址栏中的Url类似于:</p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?page=2
785
/// <p>如将该值改为“pageindex”,则上面的Url将变为:</p><p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pageindex=2 </p>
786
/// </remarks>
787
[Browsable(true),
788
DefaultValue("page"),
789
Category("分页"),
790
Description("当启用Url分页方式时,显示在url中表示要传递的页索引的参数的名称")]
791
public string UrlPageIndexName
792
{
793
get{return urlPageIndexName;}
794
set{urlPageIndexName=value;}
795
}
796
797
/// <summary>
798
/// 获取或设置当启用Url分页方式时,在url中表示要传递的页索引的参数的名称。
799
/// </summary>
800
/// <remarks>
801
/// 该属性允许您自定义通过Url传递页索引时表示要传递的页索引的参数的名称,以避免与现有的参数名重复。
802
/// <p>该属性的默认值是“page”,即通过Url分页时,显示在浏览器地址栏中的Url类似于:</p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pagesize=20
803
/// <p>如将该值改为“pagesize1”,则上面的Url将变为:</p><p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pagesize1=20 </p>
804
/// </remarks>
805
[Browsable(true),
806
DefaultValue("pagesize"),
807
Category("分页"),
808
Description("当启用Url分页方式时,显示在url中表示要传递的记录数的参数的名称")]
809
public string UrlPageSize
810
{
811
get{return urlPageSize;}
812
set{urlPageSize=value;}
813
}
814
815
/// <summary>
816
/// 获取或设置当前显示页的索引。
817
/// </summary>
818
///<remarks>使用此属性来确定在 AspNetPager 控件中当前显示的页,当前显示的页的数字索引将以红色字体加粗显示。此属性还用于以编程的方式控制所显示的页。
819
///<p> <b>注意:</b>不同于DataGrid控件的CurrentPageIndex,AspNetPager的CurrentPageIndex属性是从1开始的。</p></remarks>
820
[ReadOnly(true),
821
Browsable(false),
822
Description("当前显示页的索引"),
823
Category("分页"),
824
DefaultValue(1),
825
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
826
public int CurrentPageIndex
827
{
828
get
829
{
830
object cpage=ViewState["CurrentPageIndex"];
831
int pindex=(cpage==null)?1:(int)cpage;
832
if(pindex>PageCount&&PageCount>0)
833
return PageCount;
834
else if(pindex<1)
835
return 1;
836
return pindex;
837
}
838
set
839
{
840
int cpage=value;
841
if(cpage<1)
842
cpage=1;
843
else if(cpage>this.PageCount)
844
cpage=this.PageCount;
845
ViewState["CurrentPageIndex"]=cpage;
846
}
847
}
848
849
/// <summary>
850
/// 获取或设置需要分页的所有记录的总数。
851
/// </summary>
852
/// <remarks>
853
/// 当页面第一次加载时,应以编程方式将从存储过程或Sql语句中返回的数据表中所有要分页的记录的总数赋予该属性,AspNetPager会将其保存的ViewState中并在页面回发时从ViewState中获取该值,因此避免了每次分页都要访问数据库而影响分页性能。AspNetPager根据要分页的所有数据的总项数和 <see cref="PageSize"/> 属性来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。
854
/// </remarks>
855
/// <example>
856
/// 下面的示例显示如何以编程方式将从Sql语句返回的记录总数赋给该属性:
857
/// <p>
858
/// <code><![CDATA[
859
/// <HTML>
860
/// <HEAD>
861
/// <TITLE>Welcome to Webdiyer.com </TITLE>
862
/// <script runat="server">
863
/// SqlConnection conn;
864
/// SqlCommand cmd;
865
/// void Page_Load(object src,EventArgs e)
866
/// {
867
/// conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);
868
/// if(!Page.IsPostBack)
869
/// {
870
/// cmd=new SqlCommand("select count(id) from news",conn);
871
/// conn.Open();
872
/// pager.RecordCount=(int)cmd.ExecuteScalar();
873
/// conn.Close();
874
/// BindData();
875
/// }
876
/// }
877
///
878
/// void BindData()
879
/// {
880
/// cmd=new SqlCommand("GetPagedNews",conn);
881
/// cmd.CommandType=CommandType.StoredProcedure;
882
/// cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);
883
/// cmd.Parameters.Add("@pagesize",pager.PageSize);
884
/// conn.Open();
885
/// dataGrid1.DataSource=cmd.ExecuteReader();
886
/// dataGrid1.DataBind();
887
/// conn.Close();
888
/// }
889
/// void ChangePage(object src,PageChangedEventArgs e)
890
/// {
891
/// pager.CurrentPageIndex=e.NewPageIndex;
892
/// BindData();
893
/// }
894
/// </script>
895
/// <meta http-equiv="Content-Language" content="zh-cn">
896
/// <meta http-equiv="content-type" content="text/html;charset=gb2312">
897
/// <META NAME="Generator" CONTENT="EditPlus">
898
/// <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">
899
/// </HEAD>
900
/// <body>
901
/// <form runat="server" ID="Form1">
902
/// <asp:DataGrid id="dataGrid1" runat="server" />
903
///
904
/// <Webdiyer:AspNetPager id="pager" runat="server"
905
/// PageSize="8"
906
/// NumericButtonCount="8"
907
/// ShowCustomInfoSection="before"
908
/// ShowInputBox="always"
909
/// CssClass="mypager"
910
/// HorizontalAlign="center"
911
/// OnPageChanged="ChangePage" />
912
///
913
/// </form>
914
/// </body>
915
///</HTML>
916
/// ]]>
917
/// </code></p>
918
/// <p>本示例使用的存储过程代码如下:</p>
919
/// <code><![CDATA[
920
///CREATE procedure GetPagedNews
921
/// (@pagesize int,
922
/// @pageindex int)
923
/// as
924
/// set nocount on
925
/// declare @indextable table(id int identity(1,1),nid int)
926
/// declare @PageLowerBound int
927
/// declare @PageUpperBound int
928
/// set @PageLowerBound=(@pageindex-1)*@pagesize
929
/// set @PageUpperBound=@PageLowerBound+@pagesize
930
/// set rowcount @PageUpperBound
931
/// insert into @indextable(nid) select id from news order by addtime desc
932
/// select O.id,O.title,O.source,O.addtime from news O,@indextable t where O.id=t.nid
933
/// and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id
934
/// set nocount off
935
///GO
936
/// ]]>
937
/// </code>
938
/// </example>
939
[Browsable(false),
940
Description("要分页的所有记录的总数,该值须在程序运行时设置,默认值为225是为设计时支持而设置的参照值。"),
941
Category("Data"),
942
DefaultValue(225)]
943
public int RecordCount
944
{
945
get
946
{
947
object obj=ViewState["Recordcount"];
948
return (obj==null)?0:(int)obj;
949
}
950
set{ViewState["Recordcount"]=value;}
951
}
952
953
/// <summary>
954
/// 获取当前页之后未显示的页的总数。
955
/// </summary>
956
[Browsable(false),
957
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
958
public int PagesRemain
959
{
960
get
961
{
962
return PageCount-CurrentPageIndex;
963
}
964
}
965
966
/// <summary>
967
/// 获取或设置每页显示的项数。
968
/// </summary>
969
/// <remarks>
970
/// 该值获取或设置数据呈现控件每次要显示数据表中的的数据的项数,AspNetPager根据该值和 <see cref="RecordCount"/> 来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。</remarks>
971
/// <example>以下示例将 <see cref="AspNetPager"/> 设置为允许每页显示8条数据:
972
/// <code>
973
/// <
975
/// <Webdiyer:AspNetPager id="pager" runat="server" PageSize=8 OnPageChanged="ChangePage"/>
976
/// 
977
/// ]]></code></example>
978
[Browsable(true),
979
Description("每页显示的记录数"),
980
Category("分页"),
981
DefaultValue(10)]
982
public int PageSize
983
{
984
get
985
{
986
object obj=ViewState["PageSize"];
987
return (obj==null)?10:(int)obj;
988
}
989
set
990
{
991
ViewState["PageSize"]=value;
992
}
993
}
994
995
/// <summary>
996
/// 获取在当前页之后还未显示的剩余记录的项数。
997
/// </summary>
998
[Browsable(false),
999
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
1000
public int RecordsRemain
1001
{
1002
get
1003
{
1004
if(CurrentPageIndex<PageCount)
1005
return RecordCount-(CurrentPageIndex*PageSize);
1006
return 0;}
1007
}
1008
1009
1010
/// <summary>
1011
/// 获取所有要分页的记录需要的总页数。
1012
/// </summary>
1013
[Browsable(false),
1014
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
1015
public int PageCount
1016
{
1017
get{return (int)Math.Ceiling((double)RecordCount/(double)PageSize);}
1018
}
1019
1020
1021
#endregion
1022
1023
#region TextBox and Submit Button
1024
1025
/// <summary>
1026
/// 获取或设置页索引文本框的显示方式。
1027
/// </summary>
1028
/// <remarks>
1029
/// 页索引文件框允许用户手式输入要访问的页的索引,当页数非常多时,显示页索引文本框非常方便用户跳转到指定的页,默认情况下,该文本框只有在总页数大于或等于 <see cref="ShowBoxThreshold"/> 的值时才显示,否则不显示,要想该文本框任何时候都显示,请将其值设为Always,若希望任何时候都不显示,则应设为Never。
1030
///</remarks>
1031
[Browsable(true),
1032
Description("指定页索引文本框的显示方式"),
1033
Category("文本框及提交按钮"),
1034
DefaultValue(ShowInputBox.Auto)]
1035
public ShowInputBox ShowInputBox
1036
{
1037
get
1038
{
1039
object obj=ViewState["ShowInputBox"];
1040
return (obj==null)?ShowInputBox.Auto:(ShowInputBox)obj;
1041
}
1042
set{ViewState["ShowInputBox"]=value;}
1043
}
1044
1045
/// <summary>
1046
/// 获取或设置应用于页索引输入文本框的CSS类名。
1047
/// </summary>
1048
[Browsable(true),
1049
Category("文本框及提交按钮"),
1050
DefaultValue(null),
1051
Description("应用于页索引输入文本框的CSS类名")]
1052
public string InputBoxClass
1053
{
1054
get
1055
{
1056
return (string)ViewState["InputBoxClass"];
1057
}
1058
set
1059
{
1060
if(value.Trim().Length>0)
1061
ViewState["InputBoxClass"]=value;
1062
}
1063
}
1064
1065
/// <summary>
1066
/// 获取或设置页索引输入文本框的CSS样式文本。
1067
/// </summary>
1068
1069
[Browsable(true),
1070
Category("文本框及提交按钮"),
1071
DefaultValue(null),
1072
Description("应用于页索引输入文本框的CSS样式文本")]
1073
public string InputBoxStyle
1074
{
1075
get
1076
{
1077
return (string)ViewState["InputBoxStyle"];
1078
}
1079
set
1080
{
1081
if(value.Trim().Length>0)
1082
ViewState["InputBoxStyle"]=value;
1083
}
1084
}
1085
1086
/// <summary>
1087
/// 获取或设置页索引页索引输入文本框前的文本字符串值。
1088
/// </summary>
1089
[Browsable(true),
1090
Category("文本框及提交按钮"),
1091
DefaultValue(null),
1092
Description("页索引输入文本框前的文本内容字符串")]
1093
public string TextBeforeInputBox
1094
{
1095
get
1096
{
1097
return (string)ViewState["TextBeforeInputBox"];
1098
}
1099
set
1100
{
1101
ViewState["TextBeforeInputBox"]=value;
1102
}
1103
}
1104
1105
/// <summary>
1106
/// 获取或设置页索引文本输入框后的文本内容字符串值。
1107
/// </summary>
1108
[Browsable(true),
1109
DefaultValue(null),
1110
Category("文本框及提交按钮"),
1111
Description("页索引输入文本框后的文本内容字符串")]
1112
public string TextAfterInputBox
1113
{
1114
get
1115
{
1116
return (string)ViewState["TextAfterInputBox"];
1117
}
1118
set
1119
{
1120
ViewState["TextAfterInputBox"]=value;
1121
}
1122
}
1123
1124
1125
/// <summary>
1126
/// 获取或设置提交按钮上的文本。
1127
/// </summary>
1128
[Browsable(true),
1129
Category("文本框及提交按钮"),
1130
DefaultValue("go"),
1131
Description("提交按钮上的文本")]
1132
public string SubmitButtonText
1133
{
1134
get
1135
{
1136
object obj=ViewState["SubmitButtonText"];
1137
return (obj==null)?"go":(string)obj;
1138
}
1139
set
1140
{
1141
if(value.Trim().Length>0)
1142
ViewState["SubmitButtonText"]=value;
1143
}
1144
}
1145
/// <summary>
1146
/// 获取或设置应用于提交按钮的CSS类名。
1147
/// </summary>
1148
[Browsable(true),
1149
Category("文本框及提交按钮"),
1150
DefaultValue(null),
1151
Description("应用于提交按钮的CSS类名")]
1152
public string SubmitButtonClass
1153
{
1154
get
1155
{
1156
return (string)ViewState["SubmitButtonClass"];
1157
}
1158
set
1159
{
1160
ViewState["SubmitButtonClass"]=value;
1161
}
1162
}
1163
1164
/// <summary>
1165
/// 获取或设置应用于提交按钮的CSS样式。
1166
/// </summary>
1167
[Browsable(true),
1168
Category("文本框及提交按钮"),
1169
DefaultValue(null),
1170
Description("应用于提交按钮的CSS样式")]
1171
public string SubmitButtonStyle
1172
{
1173
get
1174
{
1175
return (string)ViewState["SubmitButtonStyle"];
1176
}
1177
set
1178
{
1179
ViewState["SubmitButtonStyle"]=value;
1180
}
1181
}
1182
/// <summary>
1183
/// 获取或设置自动显示页索引输入文本框的最低起始页数。
1184
/// </summary>
1185
/// <remarks>
1186
/// 当 <see cref="ShowInputBox"/> 设为Auto(默认)并且要分页的数据的总页数达到该值时会自动显示页索引输入文本框,默认值为30。该选项当 <see cref="ShowInputBox"/> 设为Never或Always时没有任何作用。
1187
/// </remarks>
1188
[Browsable(true),
1189
Description("指定当ShowInputBox设为ShowInputBox.Auto时,当总页数达到多少时才显示页索引输入文本框"),
1190
Category("文本框及提交按钮"),
1191
DefaultValue(30)]
1192
public int ShowBoxThreshold
1193
{
1194
get
1195
{
1196
object obj=ViewState["ShowBoxThreshold"];
1197
return (obj==null)?30:(int)obj;
1198
}
1199
set{ViewState["ShowBoxThreshold"]=value;}
1200
}
1201
1202
1203
#endregion
1204
1205
#region SelectBox and Submit Button
1206
1207
/// <summary>
1208
/// 获取或设置页索引文本框的显示方式。
1209
/// </summary>
1210
/// <remarks>
1211
/// 页索引文件框允许用户手式输入要访问的页的索引,当页数非常多时,显示页索引文本框非常方便用户跳转到指定的页,默认情况下,该文本框只有在总页数大于或等于 <see cref="ShowBoxThreshold"/> 的值时才显示,否则不显示,要想该文本框任何时候都显示,请将其值设为Always,若希望任何时候都不显示,则应设为Never。
1212
///</remarks>
1213
[Browsable(true),
1214
Description("指定页索引文本框的显示方式"),
1215
Category("分页记录数选择"),
1216
DefaultValue(ShowInputBox.Auto)]
1217
public ShowInputBox ShowSelectBox
1218
{
1219
get
1220
{
1221
object obj=ViewState["ShowSelectBox"];
1222
return (obj==null)?ShowInputBox.Auto:(ShowInputBox)obj;
1223
}
1224
set{ViewState["ShowSelectBox"]=value;}
1225
}
1226
1227
/// <summary>
1228
/// 获取或设置应用于页索引输入文本框的CSS类名。
1229
/// </summary>
1230
[Browsable(true),
1231
Category("分页记录数选择"),
1232
DefaultValue(null),
1233
Description("应用于页索引输入文本框的CSS类名")]
1234
public string SelectBoxClass
1235
{
1236
get
1237
{
1238
return (string)ViewState["SelectBoxClass"];
1239
}
1240
set
1241
{
1242
if(value.Trim().Length>0)
1243
ViewState["SelectBoxClass"]=value;
1244
}
1245
}
1246
1247
/// <summary>
1248
/// 获取或设置页索引输入文本框的CSS样式文本。
1249
/// </summary>
1250
1251
[Browsable(true),
1252
Category("分页记录数选择"),
1253
DefaultValue(null),
1254
Description("应用于页索引输入文本框的CSS样式文本")]
1255
public string SelectBoxStyle
1256
{
1257
get
1258
{
1259
return (string)ViewState["SelectBoxStyle"];
1260
}
1261
set
1262
{
1263
if(value.Trim().Length>0)
1264
ViewState["SelectBoxStyle"]=value;
1265
}
1266
}
1267
1268
/// <summary>
1269
/// 获取或设置页索引页索引输入文本框前的文本字符串值。
1270
/// </summary>
1271
[Browsable(true),
1272
Category("分页记录数选择"),
1273
DefaultValue("每页"),
1274
Description("页索引输入文本框前的文本内容字符串")]
1275
public string TextBeforeSelectBox
1276
{
1277
get
1278
{
1279
return (string)ViewState["TextBeforeSelectBox"];
1280
}
1281
set
1282
{
1283
ViewState["TextBeforeSelectBox"]=value;
1284
}
1285
}
1286
1287
/// <summary>
1288
/// 获取或设置页索引文本输入框后的文本内容字符串值。
1289
/// </summary>
1290
[Browsable(true),
1291
DefaultValue("条"),
1292
Category("分页记录数选择"),
1293
Description("页索引输入文本框后的文本内容字符串")]
1294
public string TextAfterSelectBox
1295
{
1296
get
1297
{
1298
return (string)ViewState["TextAfterSelectBox"];
1299
}
1300
set
1301
{
1302
ViewState["TextAfterSelectBox"]=value;
1303
}
1304
}
1305
1306
1307
/// <summary>
1308
/// 获取或设置提交按钮上的文本。
1309
/// </summary>
1310
[Browsable(true),
1311
Category("分页记录数选择"),
1312
DefaultValue("设置"),
1313
Description("提交按钮上的文本")]
1314
public string SubmitButtonSelectText
1315
{
1316
get
1317
{
1318
object obj=ViewState["SubmitButtonSelectText"];
1319
return (obj==null)?"设置":(string)obj;
1320
}
1321
set
1322
{
1323
if(value.Trim().Length>0)
1324
ViewState["SubmitButtonSelectText"]=value;
1325
}
1326
}
1327
/// <summary>
1328
/// 获取或设置自动显示页索引输入文本框的最低起始页数。
1329
/// </summary>
1330
/// <remarks>
1331
/// 当 <see cref="ShowInputBox"/> 设为Auto(默认)并且要分页的数据的总页数达到该值时会自动显示页索引输入文本框,默认值为30。该选项当 <see cref="ShowInputBox"/> 设为Never或Always时没有任何作用。
1332
/// </remarks>
1333
[Browsable(true),
1334
Description("指定当ShowInputBox设为ShowInputBox.Auto时,当总页数达到多少时才显示页索引输入文本框"),
1335
Category("分页记录数选择"),
1336
DefaultValue(30)]
1337
public int ShowSelectBoxThreshold
1338
{
1339
get
1340
{
1341
object obj=ViewState["ShowSelectBoxThreshold"];
1342
return (obj==null)?30:(int)obj;
1343
}
1344
set{ViewState["ShowSelectBoxThreshold"]=value;}
1345
}
1346
1347
1348
#endregion
1349
1350
#region CustomInfoSection
1351
1352
/// <summary>
1353
/// 获取或设置显示用户自定义信息区的方式。
1354
/// </summary>
1355
/// <remarks>
1356
/// 该属性值设为Left或Right时会在分页导航元素左边或右边划出一个专门的区域来显示有关用户自定义信息,设为Never时不显示。
1357
/// </remarks>
1358
[Browsable(true),
1359
Description("显示当前页和总页数信息,默认值为不显示,值为ShowCustomInfoSection.Left时将显示在页索引前,为ShowCustomInfoSection.Right时将显示在页索引后"),
1360
DefaultValue(ShowCustomInfoSection.Never),
1361
Category("自定义信息区")]
1362
public ShowCustomInfoSection ShowCustomInfoSection
1363
{
1364
get
1365
{
1366
object obj=ViewState["ShowCustomInfoSection"];
1367
return (obj==null)?ShowCustomInfoSection.Never:(ShowCustomInfoSection)obj;
1368
}
1369
set{ViewState["ShowCustomInfoSection"]=value;}
1370
}
1371
1372
/// <summary>
1373
/// 获取或设置用户自定义信息区文本的对齐方式。
1374
/// </summary>
1375
[Browsable(true),
1376
Category("自定义信息区"),
1377
DefaultValue(HorizontalAlign.Left),
1378
Description("用户自定义信息区文本的对齐方式")]
1379
public HorizontalAlign CustomInfoTextAlign
1380
{
1381
get
1382
{
1383
object obj=ViewState["CustomInfoTextAlign"];
1384
return (obj==null)?HorizontalAlign.Left:(HorizontalAlign)obj;
1385
}
1386
set
1387
{
1388
ViewState["CustomInfoTextAlign"]=value;
1389
}
1390
}
1391
1392
/// <summary>
1393
/// 获取或设置用户自定义信息区的宽度。
1394
/// </summary>
1395
[Browsable(true),
1396
Category("自定义信息区"),
1397
DefaultValue(typeof(Unit),"40%"),
1398
Description("用户自定义信息区的宽度")]
1399
public Unit CustomInfoSectionWidth
1400
{
1401
get
1402
{
1403
object obj=ViewState["CustomInfoSectionWidth"];
1404
return (obj==null)?Unit.Percentage(40):(Unit)obj;
1405
}
1406
set
1407
{
1408
ViewState["CustomInfoSectionWidth"]=value;
1409
}
1410
}
1411
1523
[Browsable(false),
2601
2608
/// 使用文字按钮。
//AspNetPager分页控件源代码:2
//版权所有:陕西省吴旗县 Webdiyer(yhaili@21cn.com)(Web site: www.webdiyer.com);3
//此源代码仅供学习参考,不得用作任何商业用途;4
//若需修改并重新编译该控件,请保留完整的源代码的版权信息!5
//有关控件升级及新控件发布信息,请留意 www.webdiyer.com 。6
//版本4.3.37
//增强版 (修改自4.3.3版本)8
//描述:增加了可自定义每页的记录数。9
//modify by liubiqu(liubiqu@sina.com) [http://www.cnblogs.com/liubiqu]10
//DateTime: 2005-06-1011

12
using System;13
using System.Collections;14
using System.Collections.Specialized;15
using System.ComponentModel;16
using System.IO;17
using System.Text;18
using System.Web.UI;19
using System.Web.UI.Design.WebControls;20
using System.Web.UI.WebControls;21

22
namespace EOffice.Components23
{24
#region AspNetPager Server Control25

26
#region 控件说明及示例27
/// <summary>28
/// 用于ASP.NET Web应用程序中对数据进行分页的的服务器控件。29
/// </summary>30
/// <remarks>不同于DataGrid控件,AspNetPager分页控件本身并不显示任何数据,而只显示页导航元素,数据在页面上的显示方式与该控件无关。该控件可以为DataGrid、DataList、Repeater以及自定义控件进行分页,配合Sql存储过程,分页性能较使用DataGrid分页有明显提升,尤其是当数据量大时性能可提升数倍!31
/// <p>AspNetPager 2.0 中新增了通过Url来分页的功能,这使得访问者可以直接输入相应的Url来访问任何页面,并且搜索引擎也可以直接检索每个页面,若使用DataGrid的分页功能,这是无法实现的。</p>32
/// <p>要使用 AspNetPager 分页控件,必须最少指定它的 <see cref="RecordCount"/> 属性,指定并编写 <see cref="PageChanged"/> 事件的处理程序。33
/// <see cref="RecordCount"/> 属性指定要分页的所有数据的总项数,若未指定该值或该值小于等于 <see cref="PageSize"/> ,则AspNetPager控件不会显示任何内容。34
/// 若未指定并编写 <see cref="PageChanged"/> 事件处理程序,则当用户点击页导航元素或在页索引文本框中手式输入页索引并提交时AspNetPager不会跳转到指定的页。35
/// AspNetPager控件的分页方法和DataGrid基本相同,即在它的 <see cref="PageChanged"/> 事件处理程序中将传递事件数据的 <see cref="PageChangedEventArgs"/> 的 <see cref="PageChangedEventArgs.NewPageIndex"/>值赋给 AspNetPager的 <see cref="CurrentPageIndex"/>属性,然后重新将新的数据与数据显示控件绑定。 </p></remarks>36
/// <example>以下示例说明如何用AspNetPager对DataGrid进行分页。37
/// <code><![CDATA[38
///<%@ Page Language="C#"%>39
///<%@ Import Namespace="System.Data"%>40
///<%@Import Namespace="System.Data.SqlClient"%>41
///<%@Import Namespace="System.Configuration"%>42
///<%@Register TagPrefix="Webdiyer" Namespace="Wuqi.Webdiyer" Assembly="aspnetpager"%>43
///<HTML>44
///<HEAD>45
///<TITLE>Welcome to Webdiyer.com </TITLE>46
/// <script runat="server">47
/// SqlConnection conn;48
/// SqlCommand cmd;49
/// void Page_Load(object src,EventArgs e)50
/// {51
/// conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);52
/// if(!Page.IsPostBack)53
/// {54
/// cmd=new SqlCommand("GetNews",conn);55
/// cmd.CommandType=CommandType.StoredProcedure;56
/// cmd.Parameters.Add("@pageindex",1);57
/// cmd.Parameters.Add("@pagesize",1);58
/// cmd.Parameters.Add("@docount",true);59
/// conn.Open();60
/// pager.RecordCount=(int)cmd.ExecuteScalar();61
/// conn.Close();62
/// BindData();63
/// }64
/// }65
///66
/// void BindData()67
/// {68
/// cmd=new SqlCommand("GetNews",conn);69
/// cmd.CommandType=CommandType.StoredProcedure;70
/// cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);71
/// cmd.Parameters.Add("@pagesize",pager.PageSize);72
/// cmd.Parameters.Add("@docount",false);73
/// conn.Open();74
/// dataGrid1.DataSource=cmd.ExecuteReader();75
/// dataGrid1.DataBind();76
/// conn.Close();77
/// pager.CustomInfoText="记录总数:<font color=\"blue\"><b>"+pager.RecordCount.ToString()+"</b></font>";78
/// pager.CustomInfoText+=" 总页数:<font color=\"blue\"><b>"+pager.PageCount.ToString()+"</b></font>";79
/// pager.CustomInfoText+=" 当前页:<font color=\"red\"><b>"+pager.CurrentPageIndex.ToString()+"</b></font>";80
/// }81
/// void ChangePage(object src,PageChangedEventArgs e)82
/// {83
/// pager.CurrentPageIndex=e.NewPageIndex;84
/// BindData();85
/// }86
/// </script>87
/// <meta http-equiv="Content-Language" content="zh-cn">88
/// <meta http-equiv="content-type" content="text/html;charset=gb2312">89
/// <META NAME="Generator" CONTENT="EditPlus">90
/// <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">91
/// </HEAD>92
/// <body>93
/// <form runat="server" ID="Form1">94
/// <asp:DataGrid id="dataGrid1" runat="server" />95
///96
/// <Webdiyer:AspNetPager id="pager" 97
/// runat="server" 98
/// PageSize="8" 99
/// NumericButtonCount="8" 100
/// ShowCustomInfoSection="left" 101
/// PagingButtonSpacing="0"102
/// ShowInputBox="always" 103
/// CssClass="mypager" 104
/// HorizontalAlign="right" 105
/// OnPageChanged="ChangePage" 106
/// SubmitButtonText="转到" 107
/// NumericButtonTextFormatString="[{0}]"/>108
///109
/// </form>110
/// </body>111
///</HTML>112
/// ]]>113
/// </code>114
/// <p>下面是该示例所用的Sql Server存储过程:</p>115
/// <code>116
/// <![CDATA[117
///CREATE procedure GetNews118
/// (@pagesize int,119
/// @pageindex int,120
/// @docount bit)121
/// as122
/// set nocount on123
/// if(@docount=1)124
/// select count(id) from news125
/// else126
/// begin127
/// declare @indextable table(id int identity(1,1),nid int)128
/// declare @PageLowerBound int129
/// declare @PageUpperBound int130
/// set @PageLowerBound=(@pageindex-1)*@pagesize131
/// set @PageUpperBound=@PageLowerBound+@pagesize132
/// set rowcount @PageUpperBound133
/// insert into @indextable(nid) select id from news order by addtime desc134
/// select O.id,O.source,O.title,O.addtime from news O,@indextable t where O.id=t.nid135
/// and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id136
/// end137
/// set nocount off138
///GO139
/// ]]>140
/// </code></example>141
#endregion142

143
[DefaultProperty("PageSize")]144
[DefaultEvent("PageChanged")]145
[ParseChildren(false)]146
[PersistChildren(false)]147
[Description("专用于ASP.Net Web应用程序的分页控件")]148
[Designer(typeof(PagerDesigner))]149
[ToolboxData("<{0}:AspNetPager runat=server></{0}:AspNetPager>")]150
public class AspNetPager:Panel,INamingContainer,IPostBackEventHandler,IPostBackDataHandler151
{152
private string cssClassName;153
private string urlPageIndexName="page";154
private string urlPageSize = "pagesize";//TODO:var urlPageSize add by liubiqu 2005-6-10155
private bool urlPaging=false;156
private string inputPageIndex;157
private string selectPageSize; //TODO:var selectPageSize add by liubiqu 2005-6-10158
private string currentUrl=null;159
private NameValueCollection urlParams=null;160

161
#region Properties162

163
#region Navigation Buttons164

165
/// <summary>166
/// 获取或设置一个值,该值批示当鼠标指针悬停在导航按钮上时是否显示工具提示。167
/// </summary>168
[Browsable(true),169
Category("导航按钮"),170
DefaultValue(true),171
Description("指定当鼠标停留在导航按钮上时,是否显示工具提示")]172
public bool ShowNavigationToolTip173
{174
get175
{176
object obj=ViewState["ShowNavigationToolTip"];177
return (obj==null)?true:(bool)obj;178
}179
set180
{181
ViewState["ShowNavigationToolTip"]=value;182
}183
}184

185
/// <summary>186
/// 获取或设置导航按钮工具提示文本的格式。187
/// </summary>188
[Browsable(true),189
Category("导航按钮"),190
DefaultValue("转到第{0}页"),191
Description("页导航按钮工具提示文本的格式")]192
public string NavigationToolTipTextFormatString193
{194
get195
{196
object obj=ViewState["NavigationToolTipTextFormatString"];197
return (obj==null)?"转到第{0}页":(string)obj;198
}199
set200
{201
string tip=value;202
if(tip.Trim().Length<1&&tip.IndexOf("{0}")<0)203
tip="{0}";204
ViewState["NavigationToolTipTextFormatString"]=tip;205
}206
}207

208
/// <summary>209
/// 获取或设置一个值,该值指示是否将页索引按钮用中文数字代替。210
/// </summary>211
/// <remarks>212
/// 将该值设为true并且未使用图片按钮时,页索引按钮中的数值1、2、3等将会被中文字符一、二、三等代替。213
/// </remarks>214
[Browsable(true),215
Category("导航按钮"),216
DefaultValue(false),217
Description("是否将页索引数值按钮用中文数字一、二、三等代替")]218
public bool ChinesePageIndex219
{220
get221
{222
object obj=ViewState["ChinesePageIndex"];223
return (obj==null)?false:(bool)obj;224
}225
set226
{227
ViewState["ChinesePageIndex"]=value;228
}229
}230

231
/// <summary>232
/// 获取或设置页索引数值导航按钮上文字的显示格式。233
/// </summary>234
/// <value>235
/// 字符串,指定页索引数值按钮上文字的显示格式,默认值为<see cref="String.Empty"/>,即未设置该属性。</value>236
/// <remarks>237
/// 使用NumericButtonTextFormatString属性指定页索引数值按钮的显示格式,如未设置该值时索引按钮文本将会是:1 2 3
,设置该值将改变索引按钮文本的显示格式,238
/// 如将该值设为“[{0}]”则索引文本会显示为:[1] [2] [3]
,将该值设为“-{0}-”则会使索引文本变为:-1- -2- -3-
。239
/// </remarks>240
[Browsable(true),241
DefaultValue(""),242
Category("导航按钮"),243
Description("页索引数值按钮上文字的显示格式")]244
public string NumericButtonTextFormatString245
{246
get247
{248
object obj=ViewState["NumericButtonTextFormatString"];249
return (obj==null)?String.Empty:(string)obj;250
}251
set252
{253
ViewState["NumericButtonTextFormatString"]=value;254
}255
}256

257
/// <summary>258
/// 获取或设置分页导航按钮的类型,即使用文字还是图片。259
/// </summary>260
/// <remarks>261
/// 要使用图片按钮,您需要准备以下图片:从0到9的十个数值图片(当ShowPageIndex设为true时),第一页、上一页、下一页、最后一页及更多页(
)五个按钮图片(当ShowFirstLast及ShowPrevNext都设为true时),262
/// 若需要使当前页索引的数值按钮不同于别的页索引数值按钮,则还需准备当前页索引的按钮图片;263
/// 若需要使已禁用的第一页、上一页、下一页及最后一页按钮图片不同于正常的按钮图片,则还需准备这四个按钮在禁用状态下的图片;264
/// <p><b>图片文件的命名规则如下:</b></p>265
/// <p>从0到9十张数值按钮图片必须命名为“数值+ButtonImageNameExtension+ButtonImageExtension”,其中的ButtonImageNameExtension可以不用设置,266
/// ButtonImageExtension是图片文件的后缀名,如 .gif或 .jpg等可以在浏览器中显示的任何图片文件类型。如页索引“1”的图片文件可命名为“1.gif”或“1.jpg”,267
/// 当您有两套或更多套图片文件时,可以通过指定ButtonImageNameExtension属性值来区分不同套的图片,如第一套图片可以不用设ButtonImageNameExtension,则图片文件名类似于“1.gif”、“2.gif”等等,而第二套图片则设置ButtonImageNameExtension为“f”,图片文件名类似于“1f.gif”,“2f.gif”等等。</p>268
/// <p>第一页按钮的图片文件名以“first”开头,上一页按钮图片名以“prev”开头,下一页按钮图片名以“next”开头,最后一页按钮图片名以“last”开头,更多页按钮图片名以“more”开头,是否使用ButtonImageNameExtension取决于数值按钮的设置及是否有更多套图片。</p>269
/// </remarks>270
/// <example>271
/// 以下代码片段示例如果使用图片按钮:272
/// <p>273
/// <code><![CDATA[274
/// <Webdiyer:AspNetPager runat="server" 275
/// id="pager1" 276
/// OnPageChanged="ChangePage" 277
/// PagingButtonType="image" 278
/// ImagePath="images" 279
/// ButtonImageNameExtension="n" 280
/// DisabledButtonImageNameExtension="g" 281
/// ButtonImageExtension="gif" 282
/// CpiButtonImageNameExtension="r" 283
/// PagingButtonSpacing=5/>284
/// ]]>285
/// </code>286
/// </p>287
/// </example>288
[Browsable(true),289
DefaultValue(PagingButtonType.Text),290
Category("导航按钮"),291
Description("分页导航按钮的类型,是使用文字还是图片")]292
public PagingButtonType PagingButtonType293
{294
get295
{296
object obj=ViewState["PagingButtonType"];297
return (obj==null)?PagingButtonType.Text:(PagingButtonType)obj;298
}299
set300
{301
ViewState["PagingButtonType"]=value;302
}303
}304

305
/// <summary>306
/// 获取或设置页导航数值按钮的类型,该值仅当PagingButtonType设为Image时才有效。307
/// </summary>308
/// <remarks>309
/// 当您将PagingButtonType设为Image当又不想让页索引数值按钮使用图片时,可以将该值设为Text,这会使页索引数据按钮使用文本而不是图片按钮。310
/// </remarks>311
[Browsable(true),312
DefaultValue(PagingButtonType.Text),313
Category("导航按钮"),314
Description("页导航数值按钮的类型")]315
public PagingButtonType NumericButtonType316
{317
get318
{319
object obj=ViewState["NumericButtonType"];320
return (obj==null)?PagingButtonType:(PagingButtonType)obj;321
}322
set323
{324
ViewState["NumericButtonType"]=value;325
}326
}327

328
/// <summary>329
/// 获取或设置第一页、上一页、下一页和最后一页按钮的类型,该值仅当PagingButtonType设为Image时才有效。330
/// </summary>331
/// <remarks>332
/// 当您将PagingButtonType设为Image但又不想让第一页、下一页、下一页和最后一页按钮使用图片,则可以将该值设为Text,这会使前面的四个按钮使用文本而不是图片按钮。333
/// </remarks>334
[Browsable(true),335
Category("导航按钮"),336
DefaultValue(PagingButtonType.Text),337
Description("第一页、上一页、下一页和最后一页按钮的类型")]338
public PagingButtonType NavigationButtonType339
{340
get341
{342
object obj=ViewState["NavigationButtonType"];343
return (obj==null)?PagingButtonType:(PagingButtonType)obj;344
}345
set346
{347
ViewState["NavigationButtonType"]=value;348
}349
}350

351
/// <summary>352
/// 获取或设置“更多页”(
)按钮的类型,该值仅当PagingButtonType设为Image时才有效。353
/// </summary>354
/// <remarks>355
/// 当您将PagingButtonType设为Image但又不想让更多页(
)按钮使用图片时,可以将此值设为Text,这会使更多页按钮使用文本而不是图片按钮。356
/// </remarks>357
[Browsable(true),358
Category("导航按钮"),359
DefaultValue(PagingButtonType.Text),360
Description("“更多页”(
)按钮的类型")]361
public PagingButtonType MoreButtonType362
{363
get364
{365
object obj=ViewState["MoreButtonType"];366
return (obj==null)?PagingButtonType:(PagingButtonType)obj;367
}368
set369
{370
ViewState["MoreButtonType"]=value;371
}372
}373

374
/// <summary>375
/// 获取或设置分页导航按钮之间的间距。376
/// </summary>377
[Browsable(true),378
Category("导航按钮"),379
DefaultValue(typeof(Unit),"5px"),380
Description("分页导航按钮之间的间距")]381
public Unit PagingButtonSpacing382
{383
get384
{385
object obj=ViewState["PagingButtonSpacing"];386
return (obj==null)?Unit.Pixel(5):(Unit.Parse(obj.ToString()));387
}388
set389
{390
ViewState["PagingButtonSpacing"]=value;391
}392
}393

394
/// <summary>395
/// 获取或设置一个值,该值指示是否在页导航元素中显示第一页和最后一页按钮。396
/// </summary>397
[Browsable(true),398
Description("是否在页导航元素中显示第一页和最后一页按钮"),399
Category("导航按钮"),400
DefaultValue(true)]401
public bool ShowFirstLast402
{403
get404
{405
object obj=ViewState["ShowFirstLast"];406
return (obj==null)?true:(bool)obj;407
}408
set{ViewState["ShowFirstLast"]=value;}409
}410

411
/// <summary>412
/// 获取或设置一个值,该值指示是否在页导航元素中显示上一页和下一页按钮。413
/// </summary>414
[Browsable(true),415
Description("是否在页导航元素中显示上一页和下一页按钮"),416
Category("导航按钮"),417
DefaultValue(true)]418
public bool ShowPrevNext419
{420
get421
{422
object obj=ViewState["ShowPrevNext"];423
return (obj==null)?true:(bool)obj;424
}425
set{ViewState["ShowPrevNext"]=value;}426
}427

428
/// <summary>429
/// 获取或设置一个值,该值指示是否在页导航元素中显示页索引数值按钮。430
/// </summary>431
[Browsable(true),432
Description("是否在页导航元素中显示数值按钮"),433
Category("导航按钮"),434
DefaultValue(true)]435
public bool ShowPageIndex436
{437
get438
{439
object obj=ViewState["ShowPageIndex"];440
return (obj==null)?true:(bool)obj;441
}442
set{ViewState["ShowPageIndex"]=value;}443
}444

445
/// <summary>446
/// 获取或设置为第一页按钮显示的文本。447
/// </summary>448
[Browsable(true),449
Description("第一页按钮上显示的文本"),450
Category("导航按钮"),451
DefaultValue("<font face=\"webdings\">9</font>")]452
public string FirstPageText453
{454
get455
{456
object obj=ViewState["FirstPageText"];457
return (obj==null)?"<font face=\"webdings\">9</font>":(string)obj;458
}459
set{ViewState["FirstPageText"]=value;}460
}461

462
/// <summary>463
/// 获取或设置为上一页按钮显示的文本。464
/// </summary>465
[Browsable(true),466
Description("上一页按钮上显示的文本"),467
Category("导航按钮"),468
DefaultValue("<font face=\"webdings\">3</font>")]469
public string PrevPageText470
{471
get472
{473
object obj=ViewState["PrevPageText"];474
return (obj==null)?"<font face=\"webdings\">3</font>":(string)obj;475
}476
set{ViewState["PrevPageText"]=value;}477
}478

479
/// <summary>480
/// 获取或设置为下一页按钮显示的文本。481
/// </summary>482
[Browsable(true),483
Description("下一页按钮上显示的文本"),484
Category("导航按钮"),485
DefaultValue("<font face=\"webdings\">4</font>")]486
public string NextPageText487
{488
get489
{490
object obj=ViewState["NextPageText"];491
return (obj==null)?"<font face=\"webdings\">4</font>":(string)obj;492
}493
set{ViewState["NextPageText"]=value;}494
}495

496
/// <summary>497
/// 获取或设置为最后一页按钮显示的文本。498
/// </summary>499
[Browsable(true),500
Description("最后一页按钮上显示的文本"),501
Category("导航按钮"),502
DefaultValue("<font face=\"webdings\">:</font>")]503
public string LastPageText504
{505
get506
{507
object obj=ViewState["LastPageText"];508
return (obj==null)?"<font face=\"webdings\">:</font>":(string)obj;509
}510
set{ViewState["LastPageText"]=value;}511
}512

513
/// <summary>514
/// 获取或设置在 <see cref="AspNetPager"/> 控件的页导航元素中同时显示的数值按钮的数目。515
/// </summary>516
[Browsable(true),517
Description("要显示的页索引数值按钮的数目"),518
Category("导航按钮"),519
DefaultValue(10)]520
public int NumericButtonCount521
{522
get523
{524
object obj=ViewState["NumericButtonCount"];525
return (obj==null)?10:(int)obj;526
}527
set{ViewState["NumericButtonCount"]=value;}528
}529

530
/// <summary>531
/// 获取或设置一个值,该值指定是否显示已禁用的按钮。532
/// </summary>533
/// <remarks>534
/// 该值用来指定是否显示已禁用的分页导航按钮,当当前页为第一页时,第一页和上一页按钮将被禁用,当当前页为最后一页时,下一页和最后一页按钮将被禁用,被禁用的按钮没有链接,在按钮上点击也不会有任何作用。535
/// </remarks>536
[Browsable(true),537
Category("导航按钮"),538
Description("是否显示已禁用的按钮"),539
DefaultValue(true)]540
public bool ShowDisabledButtons541
{542
get543
{544
object obj=ViewState["ShowDisabledButtons"];545
return (obj==null)?true:(bool)obj;546
}547
set548
{549
ViewState["ShowDisabledButtons"]=value;550
}551
}552
553
#endregion554

555
#region Image Buttons556

557
/// <summary>558
/// 获取或设置当使用图片按钮时,图片文件的路径。559
/// </summary>560
[Browsable(true),561
Category("图片按钮"),562
Description("当使用图片按钮时,指定图片文件的路径"),563
DefaultValue(null)]564
public string ImagePath565
{566
get567
{568
string imgPath=(string)ViewState["ImagePath"];569
if(imgPath!=null)570
imgPath=this.ResolveUrl(imgPath);571
return imgPath;572
}573
set574
{575
string imgPath=value.Trim().Replace("\\","/");576
ViewState["ImagePath"]=(imgPath.EndsWith("/"))?imgPath:imgPath+"/";577
}578
}579
580
/// <summary>581
/// 获取或设置当使用图片按钮时,图片的类型,如gif或jpg,该值即图片文件的后缀名。582
/// </summary>583
[Browsable(true),584
Category("图片按钮"),585
DefaultValue(".gif"),586
Description("当使用图片按钮时,图片的类型,如gif或jpg,该值即图片文件的后缀名")]587
public string ButtonImageExtension588
{589
get590
{591
object obj=ViewState["ButtonImageExtension"];592
return (obj==null)?".gif":(string)obj;593
}594
set595
{596
string ext=value.Trim();597
ViewState["ButtonImageExtension"]=(ext.StartsWith("."))?ext:("."+ext);598
}599
}600

601
/// <summary>602
/// 获取或设置自定义图片文件名的后缀字符串,以区分不同类型的按钮图片。603
/// </summary>604
/// <remarks><note>注意:</note>该值不是文件后缀名,而是为区分不同的图片文件而在图片名中加入的字符串,如:605
/// 当前有两套按钮图片,其中一套中的“1”的图片名可为“1f.gif”,另一套中的“1”的图片名可起为“1n.gif”,其中的f和n即为ButtonImageNameExtension。</remarks>606
[Browsable(true),607
DefaultValue(null),608
Category("图片按钮"),609
Description("自定义图片文件名的后缀字符串(非文件后缀名),如图片“1f.gif”的ButtonImageNameExtension即为“f”")]610
public string ButtonImageNameExtension611
{612
get613
{614
return (string)ViewState["ButtonImageNameExtension"];615
}616
set617
{618
ViewState["ButtonImageNameExtension"]=value;619
}620
}621

622
/// <summary>623
/// 获取或设置当前页索引按钮的图片名后缀。624
/// </summary>625
/// <remarks>626
/// 当 <see cref="PagingButtonType"/> 设为 Image 时,该属性允许您设置当前页索引数值按钮使用的图片名后缀字符,因此可以使当前页索引按钮与其它页索引按钮使用不同的图片,若未设置该值,则默认值为<see cref="ButtonImageNameExtension"/>,即当前页索引按钮与其它页索引按钮使用相同的图片。627
/// </remarks>628
[Browsable(true),629
DefaultValue(null),630
Category("图片按钮"),631
Description("当前页索引按钮的图片名后缀字符串")]632
public string CpiButtonImageNameExtension633
{634
get635
{636
object obj=ViewState["CpiButtonImageNameExtension"];637
return (obj==null)?ButtonImageNameExtension:(string)obj;638
}639
set640
{641
ViewState["CpiButtonImageNameExtension"]=value;642
}643
}644

645
/// <summary>646
/// 获取或设置已禁用的页导航按钮图片名后缀字符串。647
/// </summary>648
/// <remarks>649
/// 当 <see cref="PagingButtonType"/> 设为 Image 时, 该值允许您设置已禁用(即没有链接,因而点击后无反应)的页导航按钮(包括第一页、上一页、下一页、最后一页四个按钮)的图片文件名后缀字符串,因此可以使已禁用的页导航按钮不同于正常的页导航按钮。若未设置该值,则默认值为<see cref="ButtonImageNameExtension"/>,即已禁用的页导航按钮与正常的页导航按钮使用相同的图片。650
/// </remarks>651
[Browsable(true),652
DefaultValue(null),653
Category("图片按钮"),654
Description("已禁用的页导航按钮的图片名后缀字符串")]655
public string DisabledButtonImageNameExtension656
{657
get658
{659
object obj=ViewState["DisabledButtonImageNameExtension"];660
return (obj==null)?ButtonImageNameExtension:(string)obj;661
}662
set663
{664
ViewState["DisabledButtonImageNameExtension"]=value;665
}666
}667
/// <summary>668
/// 指定当使用图片按钮时,图片的对齐方式。669
/// </summary>670

671
[Browsable(true),672
Description("指定当使用图片按钮时,图片的对齐方式"),673
DefaultValue(ImageAlign.Baseline),674
Category("图片按钮")]675
public ImageAlign ButtonImageAlign676
{677
get678
{679
object obj=ViewState["ButtonImageAlign"];680
return (obj==null)?ImageAlign.Baseline:(ImageAlign)obj;681
}682
set{ViewState["ButtonImageAlign"]=value;}683
}684

685
686
#endregion687

688
#region Paging689

690
/// <summary>691
/// 获取或设置是否启用url来传递分页信息。692
/// </summary>693
/// <remarks>694
/// 启用Url分页方式是将用户欲访问的页索引通过Url来传递,由于该分页方式不使用页面向自身回发来传递数据,695
/// 所以每次分页时所有的数据都恢复为初始值或需要重新获取。使用Url分页方式不支持动态改变分页控件的属性值,696
/// 因暂时无法将新的属性值通过Url来传递给下一页。697
/// </remarks>698
/// <example>以下示例说明如何用AspNetPager的Url分页方式对DataGrid进行分页(使用Access数据库):699
/// <code><![CDATA[700
///<%@Register TagPrefix="Webdiyer" Namespace="Wuqi.Webdiyer" Assembly="aspnetpager"%>701
///<%@Import Namespace="System.Data.OleDb"%>702
///<%@ Import Namespace="System.Data"%>703
///<%@ Page Language="C#" debug=true%>704
///<HTML>705
/// <HEAD>706
/// <TITLE>Welcome to Webdiyer.com </TITLE>707
/// <script runat="server">708
/// OleDbConnection conn;709
/// OleDbCommand cmd;710
/// void Page_Load(object src,EventArgs e){711
/// conn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("access/aspnetpager.mdb"));712
/// if(!Page.IsPostBack){713
/// cmd=new OleDbCommand("select count(newsid) from wqnews",conn);714
/// conn.Open();715
/// pager.RecordCount=(int)cmd.ExecuteScalar();716
/// conn.Close();717
/// BindData();718
/// }719
/// }720
///721
/// void BindData(){722
/// cmd=new OleDbCommand("select newsid,heading,source,addtime from wqnews order by addtime desc",conn);723
/// OleDbDataAdapter adapter=new OleDbDataAdapter(cmd);724
/// DataSet ds=new DataSet();725
/// adapter.Fill(ds,pager.PageSize*(pager.CurrentPageIndex-1),pager.PageSize,"news");726
/// dg.DataSource=ds.Tables["news"];727
/// dg.DataBind();728
/// }729
///730
/// void ChangePage(object src,PageChangedEventArgs e){731
/// pager.CurrentPageIndex=e.NewPageIndex;732
/// BindData();733
/// }734
///735
/// </script>736
/// <meta http-equiv="Content-Language" content="zh-cn">737
/// <meta http-equiv="content-type" content="text/html;charset=gb2312">738
/// <META NAME="Generator" CONTENT="EditPlus">739
/// <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">740
/// </HEAD>741
/// <body>742
/// <form runat="server" ID="Form1">743
/// <h2 align="center">AspNetPager分页示例</h2>744
/// <asp:DataGrid id="dg" runat="server" 745
/// Width="760" CellPadding="4" Align="center" />746
/// 747
/// <Webdiyer:AspNetPager runat="server" id="pager" 748
/// OnPageChanged="ChangePage" 749
/// HorizontalAlign="center" 750
/// style="MARGIN-TOP:10px;FONT-SIZE:16px" 751
/// PageSize="8" 752
/// ShowInputBox="always" 753
/// SubmitButtonStyle="border:1px solid #000066;height:20px;width:30px" 754
/// InputBoxStyle="border:1px #0000FF solid;text-align:center" 755
/// SubmitButtonText="转到" 756
/// UrlPaging="true" 757
/// UrlPageIndexName="pageindex" />758
/// </form>759
/// </body>760
///</HTML>761
/// ]]></code>762
/// </example>763
[Browsable(true),764
Category("分页"),765
DefaultValue(false),766
Description("是否使用url传递分页信息的方式来分页")]767
public bool UrlPaging768
{769
get770
{771
return urlPaging;772
}773
set774
{775
urlPaging=value;776
}777
}778

779
/// <summary>780
/// 获取或设置当启用Url分页方式时,在url中表示要传递的页索引的参数的名称。781
/// </summary>782
/// <remarks>783
/// 该属性允许您自定义通过Url传递页索引时表示要传递的页索引的参数的名称,以避免与现有的参数名重复。784
/// <p>该属性的默认值是“page”,即通过Url分页时,显示在浏览器地址栏中的Url类似于:</p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?page=2 785
/// <p>如将该值改为“pageindex”,则上面的Url将变为:</p><p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pageindex=2 </p>786
/// </remarks>787
[Browsable(true),788
DefaultValue("page"),789
Category("分页"),790
Description("当启用Url分页方式时,显示在url中表示要传递的页索引的参数的名称")]791
public string UrlPageIndexName792
{793
get{return urlPageIndexName;}794
set{urlPageIndexName=value;}795
}796

797
/// <summary>798
/// 获取或设置当启用Url分页方式时,在url中表示要传递的页索引的参数的名称。799
/// </summary>800
/// <remarks>801
/// 该属性允许您自定义通过Url传递页索引时表示要传递的页索引的参数的名称,以避免与现有的参数名重复。802
/// <p>该属性的默认值是“page”,即通过Url分页时,显示在浏览器地址栏中的Url类似于:</p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pagesize=20 803
/// <p>如将该值改为“pagesize1”,则上面的Url将变为:</p><p>http://www.webdiyer.com/aspnetpager/samples/datagrid_url.aspx?pagesize1=20 </p>804
/// </remarks>805
[Browsable(true),806
DefaultValue("pagesize"),807
Category("分页"),808
Description("当启用Url分页方式时,显示在url中表示要传递的记录数的参数的名称")]809
public string UrlPageSize810
{811
get{return urlPageSize;}812
set{urlPageSize=value;}813
}814

815
/// <summary>816
/// 获取或设置当前显示页的索引。817
/// </summary>818
///<remarks>使用此属性来确定在 AspNetPager 控件中当前显示的页,当前显示的页的数字索引将以红色字体加粗显示。此属性还用于以编程的方式控制所显示的页。819
///<p> <b>注意:</b>不同于DataGrid控件的CurrentPageIndex,AspNetPager的CurrentPageIndex属性是从1开始的。</p></remarks>820
[ReadOnly(true),821
Browsable(false),822
Description("当前显示页的索引"),823
Category("分页"),824
DefaultValue(1),825
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]826
public int CurrentPageIndex827
{828
get829
{830
object cpage=ViewState["CurrentPageIndex"];831
int pindex=(cpage==null)?1:(int)cpage;832
if(pindex>PageCount&&PageCount>0)833
return PageCount;834
else if(pindex<1)835
return 1;836
return pindex;837
}838
set839
{840
int cpage=value;841
if(cpage<1)842
cpage=1;843
else if(cpage>this.PageCount)844
cpage=this.PageCount;845
ViewState["CurrentPageIndex"]=cpage;846
}847
}848

849
/// <summary>850
/// 获取或设置需要分页的所有记录的总数。851
/// </summary>852
/// <remarks>853
/// 当页面第一次加载时,应以编程方式将从存储过程或Sql语句中返回的数据表中所有要分页的记录的总数赋予该属性,AspNetPager会将其保存的ViewState中并在页面回发时从ViewState中获取该值,因此避免了每次分页都要访问数据库而影响分页性能。AspNetPager根据要分页的所有数据的总项数和 <see cref="PageSize"/> 属性来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。854
/// </remarks>855
/// <example>856
/// 下面的示例显示如何以编程方式将从Sql语句返回的记录总数赋给该属性:857
/// <p>858
/// <code><![CDATA[859
/// <HTML>860
/// <HEAD>861
/// <TITLE>Welcome to Webdiyer.com </TITLE>862
/// <script runat="server">863
/// SqlConnection conn;864
/// SqlCommand cmd;865
/// void Page_Load(object src,EventArgs e)866
/// {867
/// conn=new SqlConnection(ConfigurationSettings.AppSettings["ConnStr"]);868
/// if(!Page.IsPostBack)869
/// {870
/// cmd=new SqlCommand("select count(id) from news",conn);871
/// conn.Open();872
/// pager.RecordCount=(int)cmd.ExecuteScalar();873
/// conn.Close();874
/// BindData();875
/// }876
/// }877
///878
/// void BindData()879
/// {880
/// cmd=new SqlCommand("GetPagedNews",conn);881
/// cmd.CommandType=CommandType.StoredProcedure;882
/// cmd.Parameters.Add("@pageindex",pager.CurrentPageIndex);883
/// cmd.Parameters.Add("@pagesize",pager.PageSize);884
/// conn.Open();885
/// dataGrid1.DataSource=cmd.ExecuteReader();886
/// dataGrid1.DataBind();887
/// conn.Close();888
/// }889
/// void ChangePage(object src,PageChangedEventArgs e)890
/// {891
/// pager.CurrentPageIndex=e.NewPageIndex;892
/// BindData();893
/// }894
/// </script>895
/// <meta http-equiv="Content-Language" content="zh-cn">896
/// <meta http-equiv="content-type" content="text/html;charset=gb2312">897
/// <META NAME="Generator" CONTENT="EditPlus">898
/// <META NAME="Author" CONTENT="Webdiyer(yhaili@21cn.com)">899
/// </HEAD>900
/// <body>901
/// <form runat="server" ID="Form1">902
/// <asp:DataGrid id="dataGrid1" runat="server" />903
///904
/// <Webdiyer:AspNetPager id="pager" runat="server" 905
/// PageSize="8" 906
/// NumericButtonCount="8" 907
/// ShowCustomInfoSection="before" 908
/// ShowInputBox="always" 909
/// CssClass="mypager" 910
/// HorizontalAlign="center" 911
/// OnPageChanged="ChangePage" />912
///913
/// </form>914
/// </body>915
///</HTML>916
/// ]]>917
/// </code></p>918
/// <p>本示例使用的存储过程代码如下:</p>919
/// <code><![CDATA[920
///CREATE procedure GetPagedNews921
/// (@pagesize int,922
/// @pageindex int)923
/// as924
/// set nocount on925
/// declare @indextable table(id int identity(1,1),nid int)926
/// declare @PageLowerBound int927
/// declare @PageUpperBound int928
/// set @PageLowerBound=(@pageindex-1)*@pagesize929
/// set @PageUpperBound=@PageLowerBound+@pagesize930
/// set rowcount @PageUpperBound931
/// insert into @indextable(nid) select id from news order by addtime desc932
/// select O.id,O.title,O.source,O.addtime from news O,@indextable t where O.id=t.nid933
/// and t.id>@PageLowerBound and t.id<=@PageUpperBound order by t.id934
/// set nocount off935
///GO936
/// ]]>937
/// </code>938
/// </example>939
[Browsable(false),940
Description("要分页的所有记录的总数,该值须在程序运行时设置,默认值为225是为设计时支持而设置的参照值。"),941
Category("Data"),942
DefaultValue(225)]943
public int RecordCount944
{945
get946
{947
object obj=ViewState["Recordcount"];948
return (obj==null)?0:(int)obj;949
}950
set{ViewState["Recordcount"]=value;}951
}952

953
/// <summary>954
/// 获取当前页之后未显示的页的总数。955
/// </summary>956
[Browsable(false),957
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]958
public int PagesRemain959
{960
get961
{962
return PageCount-CurrentPageIndex;963
}964
}965
966
/// <summary>967
/// 获取或设置每页显示的项数。968
/// </summary>969
/// <remarks>970
/// 该值获取或设置数据呈现控件每次要显示数据表中的的数据的项数,AspNetPager根据该值和 <see cref="RecordCount"/> 来计算显示所有数据需要的总页数,即 <see cref="PageCount"/>的值。</remarks>971
/// <example>以下示例将 <see cref="AspNetPager"/> 设置为允许每页显示8条数据:972
/// <code>973
/// <
975
/// <Webdiyer:AspNetPager id="pager" runat="server" PageSize=8 OnPageChanged="ChangePage"/>976
/// 
977
/// ]]></code></example>978
[Browsable(true),979
Description("每页显示的记录数"),980
Category("分页"),981
DefaultValue(10)]982
public int PageSize983
{984
get985
{986
object obj=ViewState["PageSize"];987
return (obj==null)?10:(int)obj;988
}989
set990
{991
ViewState["PageSize"]=value;992
}993
}994
995
/// <summary>996
/// 获取在当前页之后还未显示的剩余记录的项数。997
/// </summary>998
[Browsable(false),999
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]1000
public int RecordsRemain1001
{1002
get1003
{1004
if(CurrentPageIndex<PageCount)1005
return RecordCount-(CurrentPageIndex*PageSize);1006
return 0;}1007
}1008

1009

1010
/// <summary>1011
/// 获取所有要分页的记录需要的总页数。1012
/// </summary>1013
[Browsable(false),1014
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]1015
public int PageCount1016
{1017
get{return (int)Math.Ceiling((double)RecordCount/(double)PageSize);}1018
}1019

1020
1021
#endregion1022

1023
#region TextBox and Submit Button1024

1025
/// <summary>1026
/// 获取或设置页索引文本框的显示方式。1027
/// </summary>1028
/// <remarks>1029
/// 页索引文件框允许用户手式输入要访问的页的索引,当页数非常多时,显示页索引文本框非常方便用户跳转到指定的页,默认情况下,该文本框只有在总页数大于或等于 <see cref="ShowBoxThreshold"/> 的值时才显示,否则不显示,要想该文本框任何时候都显示,请将其值设为Always,若希望任何时候都不显示,则应设为Never。1030
///</remarks>1031
[Browsable(true),1032
Description("指定页索引文本框的显示方式"),1033
Category("文本框及提交按钮"),1034
DefaultValue(ShowInputBox.Auto)]1035
public ShowInputBox ShowInputBox1036
{1037
get1038
{1039
object obj=ViewState["ShowInputBox"];1040
return (obj==null)?ShowInputBox.Auto:(ShowInputBox)obj;1041
}1042
set{ViewState["ShowInputBox"]=value;}1043
}1044
1045
/// <summary>1046
/// 获取或设置应用于页索引输入文本框的CSS类名。1047
/// </summary>1048
[Browsable(true),1049
Category("文本框及提交按钮"),1050
DefaultValue(null),1051
Description("应用于页索引输入文本框的CSS类名")]1052
public string InputBoxClass1053
{1054
get1055
{1056
return (string)ViewState["InputBoxClass"];1057
}1058
set1059
{1060
if(value.Trim().Length>0)1061
ViewState["InputBoxClass"]=value;1062
}1063
}1064

1065
/// <summary>1066
/// 获取或设置页索引输入文本框的CSS样式文本。1067
/// </summary>1068

1069
[Browsable(true),1070
Category("文本框及提交按钮"),1071
DefaultValue(null),1072
Description("应用于页索引输入文本框的CSS样式文本")]1073
public string InputBoxStyle1074
{1075
get1076
{1077
return (string)ViewState["InputBoxStyle"];1078
}1079
set1080
{1081
if(value.Trim().Length>0)1082
ViewState["InputBoxStyle"]=value;1083
}1084
}1085

1086
/// <summary>1087
/// 获取或设置页索引页索引输入文本框前的文本字符串值。1088
/// </summary>1089
[Browsable(true),1090
Category("文本框及提交按钮"),1091
DefaultValue(null),1092
Description("页索引输入文本框前的文本内容字符串")]1093
public string TextBeforeInputBox1094
{1095
get1096
{1097
return (string)ViewState["TextBeforeInputBox"];1098
}1099
set1100
{1101
ViewState["TextBeforeInputBox"]=value;1102
}1103
}1104

1105
/// <summary>1106
/// 获取或设置页索引文本输入框后的文本内容字符串值。1107
/// </summary>1108
[Browsable(true),1109
DefaultValue(null),1110
Category("文本框及提交按钮"),1111
Description("页索引输入文本框后的文本内容字符串")]1112
public string TextAfterInputBox1113
{1114
get1115
{1116
return (string)ViewState["TextAfterInputBox"];1117
}1118
set1119
{1120
ViewState["TextAfterInputBox"]=value;1121
}1122
}1123
1124

1125
/// <summary>1126
/// 获取或设置提交按钮上的文本。1127
/// </summary>1128
[Browsable(true),1129
Category("文本框及提交按钮"),1130
DefaultValue("go"),1131
Description("提交按钮上的文本")]1132
public string SubmitButtonText1133
{1134
get1135
{1136
object obj=ViewState["SubmitButtonText"];1137
return (obj==null)?"go":(string)obj;1138
}1139
set1140
{1141
if(value.Trim().Length>0)1142
ViewState["SubmitButtonText"]=value;1143
}1144
}1145
/// <summary>1146
/// 获取或设置应用于提交按钮的CSS类名。1147
/// </summary>1148
[Browsable(true),1149
Category("文本框及提交按钮"),1150
DefaultValue(null),1151
Description("应用于提交按钮的CSS类名")]1152
public string SubmitButtonClass1153
{1154
get1155
{1156
return (string)ViewState["SubmitButtonClass"];1157
}1158
set1159
{1160
ViewState["SubmitButtonClass"]=value;1161
}1162
}1163

1164
/// <summary>1165
/// 获取或设置应用于提交按钮的CSS样式。1166
/// </summary>1167
[Browsable(true),1168
Category("文本框及提交按钮"),1169
DefaultValue(null),1170
Description("应用于提交按钮的CSS样式")]1171
public string SubmitButtonStyle1172
{1173
get1174
{1175
return (string)ViewState["SubmitButtonStyle"];1176
}1177
set1178
{1179
ViewState["SubmitButtonStyle"]=value;1180
}1181
}1182
/// <summary>1183
/// 获取或设置自动显示页索引输入文本框的最低起始页数。1184
/// </summary>1185
/// <remarks>1186
/// 当 <see cref="ShowInputBox"/> 设为Auto(默认)并且要分页的数据的总页数达到该值时会自动显示页索引输入文本框,默认值为30。该选项当 <see cref="ShowInputBox"/> 设为Never或Always时没有任何作用。1187
/// </remarks>1188
[Browsable(true),1189
Description("指定当ShowInputBox设为ShowInputBox.Auto时,当总页数达到多少时才显示页索引输入文本框"),1190
Category("文本框及提交按钮"),1191
DefaultValue(30)]1192
public int ShowBoxThreshold1193
{1194
get1195
{1196
object obj=ViewState["ShowBoxThreshold"];1197
return (obj==null)?30:(int)obj;1198
}1199
set{ViewState["ShowBoxThreshold"]=value;}1200
}1201

1202

1203
#endregion1204

1205
#region SelectBox and Submit Button1206

1207
/// <summary>1208
/// 获取或设置页索引文本框的显示方式。1209
/// </summary>1210
/// <remarks>1211
/// 页索引文件框允许用户手式输入要访问的页的索引,当页数非常多时,显示页索引文本框非常方便用户跳转到指定的页,默认情况下,该文本框只有在总页数大于或等于 <see cref="ShowBoxThreshold"/> 的值时才显示,否则不显示,要想该文本框任何时候都显示,请将其值设为Always,若希望任何时候都不显示,则应设为Never。1212
///</remarks>1213
[Browsable(true),1214
Description("指定页索引文本框的显示方式"),1215
Category("分页记录数选择"),1216
DefaultValue(ShowInputBox.Auto)]1217
public ShowInputBox ShowSelectBox1218
{1219
get1220
{1221
object obj=ViewState["ShowSelectBox"];1222
return (obj==null)?ShowInputBox.Auto:(ShowInputBox)obj;1223
}1224
set{ViewState["ShowSelectBox"]=value;}1225
}1226
1227
/// <summary>1228
/// 获取或设置应用于页索引输入文本框的CSS类名。1229
/// </summary>1230
[Browsable(true),1231
Category("分页记录数选择"),1232
DefaultValue(null),1233
Description("应用于页索引输入文本框的CSS类名")]1234
public string SelectBoxClass1235
{1236
get1237
{1238
return (string)ViewState["SelectBoxClass"];1239
}1240
set1241
{1242
if(value.Trim().Length>0)1243
ViewState["SelectBoxClass"]=value;1244
}1245
}1246

1247
/// <summary>1248
/// 获取或设置页索引输入文本框的CSS样式文本。1249
/// </summary>1250

1251
[Browsable(true),1252
Category("分页记录数选择"),1253
DefaultValue(null),1254
Description("应用于页索引输入文本框的CSS样式文本")]1255
public string SelectBoxStyle1256
{1257
get1258
{1259
return (string)ViewState["SelectBoxStyle"];1260
}1261
set1262
{1263
if(value.Trim().Length>0)1264
ViewState["SelectBoxStyle"]=value;1265
}1266
}1267

1268
/// <summary>1269
/// 获取或设置页索引页索引输入文本框前的文本字符串值。1270
/// </summary>1271
[Browsable(true),1272
Category("分页记录数选择"),1273
DefaultValue("每页"),1274
Description("页索引输入文本框前的文本内容字符串")]1275
public string TextBeforeSelectBox1276
{1277
get1278
{1279
return (string)ViewState["TextBeforeSelectBox"];1280
}1281
set1282
{1283
ViewState["TextBeforeSelectBox"]=value;1284
}1285
}1286

1287
/// <summary>1288
/// 获取或设置页索引文本输入框后的文本内容字符串值。1289
/// </summary>1290
[Browsable(true),1291
DefaultValue("条"),1292
Category("分页记录数选择"),1293
Description("页索引输入文本框后的文本内容字符串")]1294
public string TextAfterSelectBox1295
{1296
get1297
{1298
return (string)ViewState["TextAfterSelectBox"];1299
}1300
set1301
{1302
ViewState["TextAfterSelectBox"]=value;1303
}1304
}1305
1306

1307
/// <summary>1308
/// 获取或设置提交按钮上的文本。1309
/// </summary>1310
[Browsable(true),1311
Category("分页记录数选择"),1312
DefaultValue("设置"),1313
Description("提交按钮上的文本")]1314
public string SubmitButtonSelectText1315
{1316
get1317
{1318
object obj=ViewState["SubmitButtonSelectText"];1319
return (obj==null)?"设置":(string)obj;1320
}1321
set1322
{1323
if(value.Trim().Length>0)1324
ViewState["SubmitButtonSelectText"]=value;1325
}1326
}1327
/// <summary>1328
/// 获取或设置自动显示页索引输入文本框的最低起始页数。1329
/// </summary>1330
/// <remarks>1331
/// 当 <see cref="ShowInputBox"/> 设为Auto(默认)并且要分页的数据的总页数达到该值时会自动显示页索引输入文本框,默认值为30。该选项当 <see cref="ShowInputBox"/> 设为Never或Always时没有任何作用。1332
/// </remarks>1333
[Browsable(true),1334
Description("指定当ShowInputBox设为ShowInputBox.Auto时,当总页数达到多少时才显示页索引输入文本框"),1335
Category("分页记录数选择"),1336
DefaultValue(30)]1337
public int ShowSelectBoxThreshold1338
{1339
get1340
{1341
object obj=ViewState["ShowSelectBoxThreshold"];1342
return (obj==null)?30:(int)obj;1343
}1344
set{ViewState["ShowSelectBoxThreshold"]=value;}1345
}1346

1347

1348
#endregion1349

1350
#region CustomInfoSection1351

1352
/// <summary>1353
/// 获取或设置显示用户自定义信息区的方式。1354
/// </summary>1355
/// <remarks>1356
/// 该属性值设为Left或Right时会在分页导航元素左边或右边划出一个专门的区域来显示有关用户自定义信息,设为Never时不显示。1357
/// </remarks>1358
[Browsable(true),1359
Description("显示当前页和总页数信息,默认值为不显示,值为ShowCustomInfoSection.Left时将显示在页索引前,为ShowCustomInfoSection.Right时将显示在页索引后"),1360
DefaultValue(ShowCustomInfoSection.Never),1361
Category("自定义信息区")]1362
public ShowCustomInfoSection ShowCustomInfoSection1363
{1364
get1365
{1366
object obj=ViewState["ShowCustomInfoSection"];1367
return (obj==null)?ShowCustomInfoSection.Never:(ShowCustomInfoSection)obj;1368
}1369
set{ViewState["ShowCustomInfoSection"]=value;}1370
}1371

1372
/// <summary>1373
/// 获取或设置用户自定义信息区文本的对齐方式。1374
/// </summary>1375
[Browsable(true),1376
Category("自定义信息区"),1377
DefaultValue(HorizontalAlign.Left),1378
Description("用户自定义信息区文本的对齐方式")]1379
public HorizontalAlign CustomInfoTextAlign1380
{1381
get1382
{1383
object obj=ViewState["CustomInfoTextAlign"];1384
return (obj==null)?HorizontalAlign.Left:(HorizontalAlign)obj;1385
}1386
set1387
{1388
ViewState["CustomInfoTextAlign"]=value;1389
}1390
}1391

1392
/// <summary>1393
/// 获取或设置用户自定义信息区的宽度。1394
/// </summary>1395
[Browsable(true),1396
Category("自定义信息区"),1397
DefaultValue(typeof(Unit),"40%"),1398
Description("用户自定义信息区的宽度")]1399
public Unit CustomInfoSectionWidth1400
{1401
get1402
{1403
object obj=ViewState["CustomInfoSectionWidth"];1404
return (obj==null)?Unit.Percentage(40):(Unit)obj;1405
}1406
set1407
{1408
ViewState["CustomInfoSectionWidth"]=value;1409
}1410
}1411

1523
[Browsable(false),2601

2608
/// 使用文字按钮。
浙公网安备 33010602011771号