您的位置:首页 > 数据库

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

2006-08-14 16:50 190 查看
非数据库数据源分页的实现
暂时测试地址:

202.127.144.107/overred/nodatapage.htm

下载地址:

chinaeduonline.net/rar/nodatapage.rar

里面有详细的说明

主要代码:

把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>当前页: 

<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.

需要工程文件的给我要吧.

演示效果:

页:1页:2页:3共3页

aa81

aa82

aa83

aa84

aa85

aa86

aa87

aa88

aa89

aa90

aa91

aa92

aa93

aa94

aa95

aa96

aa97

aa98

aa99

当前页: 3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: