欢迎光临
我们一直在努力

DataReader也玩超酷数据显示分页-.NET教程,数据库应用

建站超值云服务器,限时71元/月

用datareader实现分页,让我头疼了好多天。为什么我非的用datareader控件实现分页呢?大家看看(http://www.wrclub.net/mb/)这个页面,也许有点明白了吧!对数据的横竖排列我们可以随意控制!

asp.net中,最容易完成分页操作的是datagrid,其次是datalist控件;但它们对数据的显示却做了限制,使得数据显示变得很难操作。datareader模拟快速、仅向前的只读游标的操作,完成分页根本不可能,针对datareader实现分页也只能从sql语句分析,但它对数据显示完全自由,我们可以根据自己的意愿来定义数据的显示方式!

代码如下:

<%@ page language="c#" debug="true" %>

<%@outputcache duration="3" varybyparam="none"%>

<%@import namespace="system.data"%>

<%@import namespace="system.data.sqlclient"%>

<script language="c#" runat="server">

//以下源码由网人俱乐部提供,作者:福星,网址:http://www.wrclub.net/

//转摘请注明出处和作者

//定义每页显示记录数

int pagesize=9;

sqlconnection conn;

void page_load(object src,eventargs e)

{

int recordcount,pagecount,currentpage,startid,endid;

//建立与数据库的连接

conn =new sqlconnection(configurationsettings.appsettings["strconn"]);

conn.open();

//第一次请求执行

if(!page.ispostback)

{

//计算总共有多少记录

recordcount = calculaterecord();

//计算总共有多少页

//取整

pagecount = recordcount/pagesize;

if (recordcount%pagesize > 0)

pagecount = pagecount + 1;

lblpagecount.text = pagecount.tostring();

lblrecordcount.text = recordcount.tostring();

currentpage = 0;

}

//定义一个临时变量

string startidt,endidt;

//设置下一页开始id

startid=0;

//设置上一页结束id

endid=0;

startidt=request.params["sid"];

endidt=request.params["eid"];

//获得下一页开始id

if(startidt!=null)

startid=convert.toint32(startidt);

//获得上一页结束id

if(endidt!=null)

endid=convert.toint32(endidt);

//sql语句开始部分

string connstr="select top "+pagesize+" * from article where classid=1 ";

//如果有下一页开始id的值,说明点击了“下一页”,条件语句查询的id小于开始id(这里排序为id倒序)

if(startid>0)

connstr+=" and id<"+startid;

//如果有上一页结束id的值,说明点击了“上一页”,条件语句查询的id大于结束id(这里排序为id倒序)

if(endid>0)

connstr+=" and id>"+endid;

//id倒序

connstr+=" order by id desc";

//datareader执行以上sql语句

sqlcommand cmd=new sqlcommand(connstr,conn);

sqldatareader myreader = cmd.executereader();

string html="<table border=0 cellpadding=0 cellspacing=0 style=border-collapse: collapse bordercolor=#111111 width=100% height=139 bgcolor=#ffffff><tr>";

int i=0;

while(myreader.read())

{

//获得上一页结束id值

if(i==0)endid=convert.toint32(myreader[0]);

html+="<td align=center height=180 ><table border=0 cellpadding=0 cellspacing=0 style=border-collapse: collapse bordercolor=#111111 width=145><tr><td align=center><img src="+myreader[2].tostring().trim()+"/"+myreader[3].tostring().trim()+" height=143 width=140 border=0 alt="+myreader[1].tostring().trim()+"></td></tr><tr><td width=100% background=images/mbbg.gif><table border=0cellpadding=0cellspacing=0width=100%><tr><td width=50%><a href="+myreader[2].tostring().trim()+"/ target=_blank><img src=images/view.gif border=0></a></td><td width=50% align=right><a href=mbdown.aspx?id="+myreader[0]+" target=_blank><img src=images/down.gif border=0></a></td></tr></table></td></tr></table></td>";

i++;

if(i%3==0)

html+="</tr><tr>";

//获得下一页开始id值

if(i==pagesize)startid=convert.toint32(myreader[0]);

}

myreader.close();

html+="</tr></table>";

mblist.innerhtml=html;

//获得页的值

if(request.params["page"]!=null)

currentpage = convert.toint32(request.params["page"]);

if(pagecount==0)

{

lblcurrentpage.text = "0";

pagelist.innerhtml="上一页 下一页";

}

else

{

lblcurrentpage.text = currentpage.tostring();

pagelist.innerhtml="<a href=http://www.wrclub.net/mblist.aspx?id=22&classname=模板中心&page="+(currentpage-1)+"&eid="+endid+">上一页</a> <a href=http://www.wrclub.net/mblist.aspx?id=22&classname=模板中心&page="+(currentpage+1)+"&sid="+startid+">下一页</a>";

if(currentpage==pagecount)

pagelist.innerhtml="<a href=http://www.wrclub.net/mblist.aspx?id=22&classname=模板中心&page="+(currentpage-1)+"&eid="+endid+">上一页</a> 下一页";

if(currentpage==0)

{

pagelist.innerhtml="上一页 <a href=http://www.wrclub.net/mblist.aspx?id=22&classname=模板中心&page="+(currentpage+2)+"&sid="+startid+">下一页</a>";

lblcurrentpage.text = (currentpage+1).tostring();

}

}

}

//获得记录总数

public int calculaterecord()

{

int intcount;

string strcount = "select count(*) from article where classid=1";

sqlcommand mycomm = new sqlcommand(strcount,conn);

sqldatareader dr = mycomm.executereader();

if(dr.read())

{

intcount = int32.parse(dr[0].tostring());

}

else

{

intcount = 0;

}

dr.close();

return intcount;

}

</script>

<html>

<head>

<meta http-equiv="content-type" content="text/html; charset=gb2312">

<title>模板中心:网人俱乐部</title>

<meta name="keywords" content="学习,免费资源,asp,jsp,flash,photoshop,社区,论坛,同学录,电子图书,网站建设,宣传,推广,聊天,数据库,经验心得,游戏,game,电子超市,网人交流论坛,插件,下载">

<meta name="description" content="提供网站建设、开发方面的学习资料、经验心得,同时提供免费的电子书籍、网站免费资源、制作工具、插件、滤镜,网站还有网上电子超市、论坛、网人交流论坛">

<link rel="stylesheet" type="text/css" href="style.css"><link rel="shortcut icon" href="favicon.ico">

</head>

<body topmargin="0" leftmargin="0"><form runat=server>

<!– #include file="top.inc" –>

<table width="778" border="0" cellpadding="0" cellspacing="0" bgcolor="#d8d8d8">

<tr>

<td width="562" height="400" align="center" valign="top"><br>

<!– 数据显示位置 –>

<span id="mblist" runat="server"></span>

<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#ffffff">

<tr>

<td align=center>共有<asp:label id="lblrecordcount" forecolor="red" runat="server" />条记录

当前为<asp:label id="lblcurrentpage" forecolor="red" runat="server" />/<asp:label id="lblpagecount" forecolor="red" runat="server" />页 </td>

<td align=center>

<!– 分页显示位置 –>

<span id="pagelist" runat="server"></span>

</td>

</tr>

</table>

</td></tr></table>

</form>

</body></html>

注明:下一页开始id值为最接近下一页开始id值,上一页结束id为最接近上一页结束id。我这个写的相对实现了数据的自定义显示,对于分页功能还不是很强大,大家可以在此基础上增加功能。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » DataReader也玩超酷数据显示分页-.NET教程,数据库应用
分享到: 更多 (0)

相关推荐

  • 暂无文章