非数据库数据源分页的实现

评价:
0
(0用户)

主要代码:

把arraylist(或数组)的数据源绑定到repeater,并进行分页
+++demo++++
aspx
__________________________________________
<body>
<form id="form1" method="post" runat="server">
<font face="宋体">
<p><asp:repeater id="rtest" runat="server" datamember="1">
<itemtemplate>
<f color="#ff3366">
<%#container.dataitem%>
<br>
</f
</itemtemplate>
</asp:repeater></p>
<p>当前页:&nbsp;
<asp:label id="dq" runat="server">1</asp:label></p>
<p>
<asp:label id="link" runat="server">label</asp:label></p>
</font>
</form>
</body>
____________________________________________________

.cs
____________________________________________________________
public class t1 : system.web.ui.page
{
protected system.web.ui.webcontrols.label dq;
protected system.web.ui.webcontrols.label link;
protected system.web.ui.webcontrols.label d;
protected system.web.ui.webcontrols.repeater rtestt;
protected system.web.ui.webcontrols.repeater rtest;
private int pagesize;//每页显示的记录数目

public void page_load(object sender, system.eventargs e)
{
// 在此处放置用户代码以初始化页面
if(!page.ispostback)
pagesize=40; //每页显示的记录数目
this.rtest.datasource=datasource();//直接绑定到数据源
this.rtest.databind();
}

//设置arraylist,供arraylist datasource()调用
public arraylist data()
{
//++++给repeater构造数据源,长度变量为j+++++++++++++++++++++++++++++++++++++++++++++++++++++
arraylist s=new arraylist();
for(int j=1;j<100;j++)
s.add("aa"+j.tostring());
return s;

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
#regi
private arraylist datasource()
{

arraylist s=data();
{
//再次构造一个arraylist,作为每个页面显示的数据
arraylist subs=new arraylist();
int rek=int32.parse(request.querystring["page"]);
dq.text=(rek+1).tostring();

//如果是能被整除,如总记录数为20,每页显示4条记录,所以就整除,要是每页显示3条记录,则在最后页为2条记录
if(s.count==pagesize*(s.count/pagesize))
{
for(int link=0;link<s.count/pagesize;link++)
{
response.write("页:<a href='#' /"+"a>";

}
}
//不能被整除的处理
if(s.count!=pagesize*(s.count/pagesize))
{
for(int link=0;link<(s.count/pagesize)+1;link++)
{
response.write("页:<a href='#' ) +">"+(link+1)+"</"+"a>";

}
}

//判断是否能记录是否能被页数整除
if(s.count==pagesize*(s.count/pagesize))
{
int k=rek;
if((k*pagesize)<s.count)
{
for(int i=(pagesize*k);i<(pagesize*k+pagesize);i++)
{
subs.add(s[i]);
}
}
}

//不能整除,对最后页的设置.如总记录数为20,每页显示3条记录,以下就设置就只显示最后也的那2条记录
if(rek==s.count/pagesize)
{
int k=rek;
for(int i=(pagesize*k);i<(s.count);i++)
{

subs.add(s[i]);
}

}

else
{
int k=rek;

{
for(int i=(pagesize*k);i<(pagesize*k+pagesize);i++)
{

subs.add(s[i]);
}
}

}
if(s.count==pagesize*(s.count/pagesize))
{
response.write("共"+s.count/pagesize+"页";
}
else
{
response.write("共"+(1+s.count/pagesize)+"页";
}
return subs;
}

}
#endregion

#region web 窗体设计器生成的代码
override protected void oninit(eventargs e)
{
//
// codegen: 该调用是 asp.net web 窗体设计器所必需的。
//
initializecomp
base.oninit(e);
}

/// <summary>
/// 设计器支持所需的方法 – 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void initializecomp
{
this.load += new system.eventhandler(this.page_load);

}
#endregion
}

思路:
建立个arraylist data(),储存所有的数据.
而arraylist datasource()则为从总的数据源中取要显示的某部分.
也就是你看到的当前页的数据.

实现方法:
首先找到当前页的开始位置i,(即s[i]中的i是几)和当前页结束时的i
并把他们添加到arraylist subs中
其中arraylist subs只储存当前页的记录.

主要变量声明:
pagesize 每页显示的记录数目
j 数据源的总记录数值(我设置的为99,因为1=j<100)

用途:
这样只要你把数据库中的记录查询后,把他添加到arraylist s里
就可以直接
pagesize=40; //每页显示的记录数目
this.rtest.datasource=datasource();//直接绑定到数据源
this.rtest.databind();
绑定,并分页.(也可以封装为一个组件使用)

说明:对datalist和datagrid的我还没研究.此方法是我偶想到的,具体的用法我会进步"开发".暂时首也需要带参数page.

注册并通过认证的用户才可以进行评价!

发表评论