class="FocusMe">本文讲解Repeater控件与PagedDataSource相结合实现其分页功能。PagedDataSource 类封装那些允许数据源控件(如 DataGrid、GridView)执行分页操作的属性。如果控件开发人员需对自定义数据绑定控件提供分页支持,即可使用此类。
PagedDataSource 类的部分公共属性:
AllowCustomPaging // 获取或设置指示是否启用自定义分页的值。
AllowPaging // 获取或设置指示是否启用分页的值。
Count // 获取要从数据源使用的项数。
CurrentPageIndex // 获取或设置当前页的索引。
DataSource // 获取或设置数据源。
DataSourceCount // 获取数据源中的项数。
FirstIndexInPage // 获取页中的第一个索引。
IsCustomPagingEnabled // 获取一个值,该值指示是否启用自定义分页。
IsFirstPage // 获取一个值,该值指示当前页是否是首页。
IsLastPage // 获取一个值,该值指示当前页是否是最后一页。
IsPagingEnabled // 获取一个值,该值指示是否启用分页。
IsReadOnly // 获取一个值,该值指示数据源是否是只读的。
IsSynchronized // 获取一个值,该值指示是否同步对数据源的访问(线程安全)。
PageCount // 获取显示数据源中的所有项所需要的总页数。
PageSize // 获取或设置要在单页上显示的项数。
VirtualCount // 获取或设置在使用自定义分页时数据源中的实际项数。
下面是PagedDataSource类实现Repeater控件的分页显示例子,如图:
本例使用vs.net 2008(C#)编写。后台.CS代码。来自 admin10000.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81protected
void
Page_Load(
object
sender, EventArgs e)
{
if
(!Page.IsPostBack)
{
int
pageIndex = 1;
try
{
pageIndex = Convert.ToInt32(Request.QueryString[
"Page"
]);
if
(pageIndex <= 0) pageIndex = 1;
}
catch
{
pageIndex = 1;
}
DataTable dt = GetDocumentTable();
PagedDataSource pds =
new
PagedDataSource();
pds.DataSource = dt.DefaultView;
// 设置数据源
pds.AllowPaging =
true
;
// 设置指示是否启用分页的值
pds.PageSize = 5;
// 设置要在每页显示的数量
pds.CurrentPageIndex = pageIndex - 1;
// 设置当前页的索引。
rptDocumentList.DataSource = pds;
rptDocumentList.DataBind();
ltlPageBar.Text = GetPageBar(pds);
}
}
// 分页条
private
string
GetPageBar(PagedDataSource pds)
{
string
pageBar =
string
.Empty;
int
currentPageIndex = pds.CurrentPageIndex + 1;
if
(currentPageIndex == 1)
{
pageBar +=
"<a href=\"javascript:void(0)\">首页</a>"
;
}
else
{
pageBar +=
"<a href=\""
+ Request.CurrentExecutionFilePath +
"?Page=1\">首页</a>"
;
}
if
((currentPageIndex - 1) < 1)
{
pageBar +=
"<a href=\"javascript:void(0)\">上一页</a>"
;
}
else
{
pageBar +=
"<a href=\""
+ Request.CurrentExecutionFilePath +
"?Page="
+ (currentPageIndex - 1) +
"\">上一页</a>"
;
}
if
((currentPageIndex + 1) > pds.PageCount)
{
pageBar +=
"<a href=\"javascript:void(0)\">下一页</a>"
;
}
else
{
pageBar +=
"<a href=\""
+ Request.CurrentExecutionFilePath +
"?Page="
+ (currentPageIndex + 1) +
"\">下一页</a>"
;
}
if
(currentPageIndex == pds.PageCount)
{
pageBar +=
"<a href=\"javascript:void(0)\">末页</a>"
;
}
else
{
pageBar +=
"<a href=\""
+ Request.CurrentExecutionFilePath +
"?Page="
+ pds.PageCount +
"\">末页</a>"
;
}
return
pageBar;
}
// 创建测试表
DataTable GetDocumentTable()
{
DataTable dt =
new
DataTable();
dt.Columns.Add(
"DocumentId"
,
typeof
(
int
));
dt.Columns.Add(
"Title"
,
typeof
(
string
));
for
(
int
i = 1; i <= 30; i++)
{
DataRow row = dt.NewRow();
row[
"DocumentId"
] = i;
row[
"Title"
] =
"文档标题 "
+ i +
""
;
dt.Rows.Add(row);
}
return
dt;
}
前台.aspx代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19<
form
id
=
"form1"
runat
=
"server"
>
<
div
>
<
asp:Repeater
ID
=
"rptDocumentList"
runat
=
"server"
>
<
HeaderTemplate
>
<
ul
>
</
HeaderTemplate
>
<
ItemTemplate
>
<
li
>
<%# DataBinder.Eval(Container.DataItem, "Title")%></
li
>
</
ItemTemplate
>
<
FooterTemplate
>
</
ul
>
</
FooterTemplate
>
</
asp:Repeater
>
</
div
>
<
div
class
=
"pageBar"
>
<
asp:Literal
ID
=
"ltlPageBar"
runat
=
"server"
></
asp:Literal
>
</
div
>
</
form
>
下载代码示例: PageDemo.RAR