DataReader也玩超酷數據顯示分頁
2024-07-21 02:23:51
供稿:網友
用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='http://www.163design.net/n/f/images/view.gif' border=0></a></td><td width='50%' align=right><a href='mbdown.aspx?id="+myreader[0]+"' target=_blank><img src='http://www.163design.net/n/f/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 >上一頁</a> <a >下一頁</a>";
if(currentpage==pagecount)
pagelist.innerhtml="<a >上一頁</a> 下一頁";
if(currentpage==0)
{
pagelist.innerhtml="上一頁 <a >下一頁</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。我這個寫的相對實現了數據的自定義顯示,對于分頁功能還不是很強大,大家可以在此基礎上增加功能。菜鳥學堂: