使用第三方控件的方法我就不说了,这里主要说说如何自己实现分页方法。
我的DataList分页方法的核心原理是利用PagedDataSource对象,PagedDataSource类封装了DataGrid 控件的属性,这些属性使 DataGrid 可以执行分页,下面是PagedDataSource的公共属性:
AllowCustomPaging
AllowPaging
Count
CurrentPageIndex
DataSource
DataSourceCount
FirstIndexInPage
IsCustomPagingEnabled
IsFirstPage
IsLastPage
IsPagingEnabled
IsReadOnly
IsSynchronized
PageCount
PageSize
VirtualCount
那么如何使用 PagedDataSource对象进行DataList分页呢?(网上有很多的讲DataList分页的文章,有一些是糊弄人的,有的还无法起作用,我被骗过一次,本文是我经过个人实践经验得到,可以顺利执行。希望对大家有所帮助。)
现在开始拉!
DataView
PagedDataSource
objPds.DataSource = objView;
objPds.AllowPaging = true
objPds.PageSize = 4;
objPds.CurrentPageIndex = int
上面的这两段代码都是写在BindData()函数中的,供每次点击分页按钮时调用。BindData()函数如下:
private void
{
string
DataTable
if
{
DataView
PagedDataSource
objPds.DataSource = objView;
objPds.AllowPaging = true;
objPds.PageSize = 4;
objPds.CurrentPageIndex = int.Parse(ViewState[”pageindex”].ToString());
if
{
lkPre.Visible = true
}
else
{
lkPre.Visible = false
}
if
{
lkNext.Visible = true
}
else
{
lkNext.Visible = false
}
dlData.DataSource = objPds;
dlData.DataBind();
}
}
blockquote> 到此为止,我们已经将数据交给了PagedDataSource,剩下的分页将利用PagedDataSource 进行处理。可能大家注意到了,这个数据交付是完整的数据交付,如果数据量很大会造成一定的效率低下,不过这里暂时不考虑这个问题。有兴趣的朋友可以一起探讨一下。
上面的第三行代码中的 ViewState[“pageindex”
BindData()函数中后面的部分是控制向前向后按钮的显隐的,不再多说。
第二步中说过利用 ViewState[“pageindex”
protected void
{
if
{
ViewState[“pageindex”
BindData(); }
}
我们需要加两个按钮(Previous、Next)来点击进行分页控制。
<
<
<
<
</
</
<
<
两个按钮的 OnCommand都是
protected void
{
string
int
if
{
pageindex = pageindex - 1;
}
else
{
pageindex = pageindex + 1;
}
ViewState[“pageindex”
BindData();
}
至此,我们的分页函数已经写完了。这里还有一些东西没有说,比如显示一共多少条记录,当前第几页,一共多少页以及每一页的页码。相信看懂了上面所说的后这些东西还是容易写出来的。
总结一下,我们在前台写好DataList等待数据,而数据是由PagedDataSource提供的,分页通过我们新加的两个ImageButton来控制ViewState进而达到控制PagedDataSource的CurrentPageIndex来实现的。所以,其实DataList也没干啥事,就是显示了每一页的数据而已。有一点需要说明,PagedDataSource的CurrentPageIndex是从0开始的,这也是为什么在Page_load事件中要讲ViewState置为0而不是1的缘故。