分享
 
 
 

DataReader也玩超酷数据显示分页

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

用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='0'cellpadding='0'cellspacing='0'width='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。我这个写的相对实现了数据的自定义显示,对于分页功能还不是很强大,大家可以在此基础上增加功能。

源出处:http://www.wrclub.net/study/listarticle.aspx?id=1157

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有