一.为什么用分页呢?
第一点:用户体验更好,如果有上万条数据,用户需要不同的拉动滚动条,用户体验很差。
第二点:如果将数据表中的全部数据加载到List表中,这样内存会爆炸。
第三点:分页后,每页的个数有限,加载速度快,用户体验好。
二、先浏览一下我们经常用的CSDN分页
三、代码详解
DAL层代码:
第一部分:查询指定范围内的数据,重点学习一下SQL语句,具体SQL语句详解,请看。。。。
#region 分页学习,根据指定的范围获取指定的数据
public List<userInfo> GetPageList(int start,int end)
{
string sql = "select * from (select*,row_number()over(order by id )as num from userInfo)as t where t.num between @start and @end";
SqlParameter[] ps =
{
new SqlParameter("@start",start),
new SqlParameter("@end",end),
};
DataTable dt = SqlHelper.GetDataTable(sql, CommandType.Text,ps);
List<userInfo> list = new List<userInfo>();
foreach (DataRow row in dt.Rows)
{
list.Add(new userInfo()
{
Id = Convert.ToInt32(row["ID"]),
userName = row["UserName"] != DBNull.Value ? row["UserName"].ToString() : string.Empty,
userPass = row["UserPass"] != DBNull.Value ? row["UserPass"].ToString() : string.Empty,
regTime = Convert.ToDateTime(row["RegTime"]),
Email = row["Email"] != DBNull.Value ? row["Email"].ToString() : string.Empty,
});
}
return list;
}
#endregion
第二部分:获取数据表中的数据总条数
#region 获取数据表中的数据总条数
public int GetRecordCount()
{
string sql = "select count(*) from userInfo";
return Convert.ToInt32(SqlHelper.ExecuteScalar(sql, CommandType.Text));
}
#endregion
BLL层 :进行逻辑判断,根据索引算出当前页算出数据的起始位置和末尾位置
根据数据总条数,算出总页数
#region 分页学习:获取某一页的数据、
/// <summary>
/// 计算获取数据的访问,完成分页
/// </summary>
/// <param name="pageIndex">当前页码</param>
/// <param name="pageSize">每页显示的记录</param>
/// <returns></returns>
public List<userInfo> GetPageList(int pageIndex, int pageSize)
{ //定义起始位置,pageIndex为当前索引页,PageSize为一页数据的条数,例如当前页为2,一页数据为10个,则是11——20
int start = (pageIndex - 1) * pageSize + 1;
//定义末端位置,即当前页乘以每页的数量,例如当前页为2,则改页的最后一条数据为20
int end = pageIndex * pageSize;
return userInfoDal.GetPageList(start, end);
}
#endregion
#region 获取总结页数
/// <summary>
/// 获取总页数
/// </summary>
/// <param name="pageSize">每页显示的记录数目</param>
/// <returns></returns>
public int GetRecordCount(int pageSize)
{
int recoredCount = userInfoDal.GetRecordCount();//获取总的记录数
//获取总的页数,这里用到了Math.Celling()天花板函数,该方法会进一步取整,如果是正数就是本身,不是,则向上取整
int pageCount = Convert.ToInt32(Math.Ceiling((double)recoredCount / pageSize));
return pageCount;
}
#endregion
NewList.aspx
忽略以下代码,该代码直接从网站copy的,我们只改我们分页界面的布局信息,看图片即可。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NewList.aspx.cs" Inherits="WebPage.NewList" %>
<%@ Import Namespace="Common" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<title>新闻中心--北京华科世佳软件开发有限公司</title>
<meta name="robots" content="index, follow" />
<meta name="author" content="北京多维网讯科技有限公司" />
<meta name="keywords" content="软件开发、房地产业管理类软件、新建商品房网上备案系统、存量房网上备案系统、统计与发布系统、项目管理系统、从业主题管理系统、产权产籍管理系统、测绘成果及管理系统"/>
<meta name="description" content="北京华科世佳软件开发有限公司地处国家计算机应用软件研发腹地——北京市海淀区上地信息产业基地,具有明显的人才优势、技术优势和环境优势。我公司在2004年12月通过了北京市科委的软件企业认证和北京市软件行业协会软件产品的认定。" />
<link href="webDemos/style/style.css" type="text/css" rel="stylesheet" />
<link rel="icon" href="../favicon.ico" type="image/x-icon" />
<link href="CSS/pageBarStyle.css" rel="stylesheet" />
</head>
<body class="body_column">
<div id="wrap_column">
<!----------------------------------begin header_column---------------------------------->
<div id="header_column" class="header_news"><!-- #BeginLibraryItem "/Library/header.lbi" --><h1 class="logo_column"><a href="../index.html"><img src="webDemos/images/logo.png" width="179" height="55" alt="北京华科世佳软件开发有限公司" /></a></h1>
<!-- #EndLibraryItem -->
<div class="nav_column">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="754" height="37" id="FlashID" title="北京华科世佳软件开发有限公司">
<param name="movie" value="webDemos/flash/sub_fla.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<param name="swfversion" value="8.0.35.0" />
<!-- 此 param 标签提示使用 Flash Player 6.0 r65 和更高版本的用户下载最新版本的 Flash Player。如果您不想让用户看到该提示,请将其删除。 -->
<param name="expressinstall" value="../Script/expressInstall.swf" />
<!-- 下一个对象标签用于非 IE 浏览器。所以使用 IECC 将其从 IE 隐藏。 -->
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="webDemos/flash/sub_fla.swf" width="754" height="37">
<!--<![endif]-->
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<param name="swfversion" value="8.0.35.0" />
<param name="expressinstall" value="../Script/expressInstall.swf" />
<!-- 浏览器将以下替代内容显示给使用 Flash Player 6.0 和更低版本的用户。 -->
<div>
<h4>此页面上的内容需要较新版本的 Adobe Flash Player。</h4>
<p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="获取 Adobe Flash Player" width="112" height="33" /></a></p>
</div>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
</div>
<!----------------------------------end header_column---------------------------------->
<!----------------------------------begin main_column---------------------------------->
<div id="main_column">
<div id="sidebar_column">
<h2 class="title_news">新闻中心</h2><!-- #BeginLibraryItem "/Library/menu_prd.lbi" -->
<dl class="menu_prd">
<dt>软件产品</dt>
<dd><a class="graylink" href="../Product/NewHouse.html">新建商品房网上备案系统</a></dd>
<dd><a class="graylink" href="../Product/StockHouse.html">存量房网上备案系统</a></dd>
<dd><a class="graylink" href="../Product/Statistics.html">统计与发布系统</a></dd>
<dd><a class="graylink" href="../Product/ProjectManagement.html">项目管理系统</a></dd>
<dd><a class="graylink" href="../Product/Practitioners.html">从业主题管理系统</a></dd>
<dd><a class="graylink" href="../Product/Property.html">产权产籍管理系统</a></dd>
<dd><a class="graylink" href="../Product/Mapping.html">测绘成果及管理系统</a></dd>
<dd><a class="graylink" href="../Product/MaintenanceFunds.html">维修资金管理系统</a></dd>
<dd><a class="graylink" href="../Product/HousingSecurity.html">住房保障管理体系</a></dd>
<dd><a class="graylink" href="../Product/Transaction.html">房产交易资金监管系统</a></dd>
</dl>
<a href="../Contact/Contact.html" class="contct"><img src="webDemos/images/img_contact_sidebarcolumn.png" width="160" height="52" alt="联系我们" /></a><!-- #EndLibraryItem --></div>
<div id="content_column">
<div class="position"><a class="graylink" href="../index.html">首页</a> < <span class="color0range">新闻中心</span></div>
<div class="cont">
<ul class="list_news">
<%=StrHtml%>
</ul>
<div class="pages"><a href="NewList.aspx?pageIndex=1">首页</a> |
<a href="NewList.aspx?pageIndex=<%=PageIndex-1<1?1:PageIndex-1 %>">前页</a> |
<a href="NewList.aspx?pageIndex=<%=PageIndex+1>PageCount?PageCount:PageIndex+1 %>">后页</a> |
<a href="NewList.aspx?pageIndex=<%=PageCount %>">尾页</a>
页次:<%=PageIndex %>/<%=PageCount %>页
</div>
<hr />
<div class="page_nav">
<!--数字分页-->
<%=PageBarHelper.GetpageBar(PageIndex,PageCount)%>
</div>
</div>
</div>
<div class="clear"></div>
</div>
<!----------------------------------end main_column---------------------------------->
<!----------------------------------begin footer_column----------------------------------><!-- #BeginLibraryItem "/Library/fooer.lbi" -->
<div id="footer_column">
<span class="copyright"></span><span class="frdlink">友情链接:<select name="">
<option>公司或合作伙伴网站</option>
</select></span>
</div><!-- #EndLibraryItem --><!----------------------------------end footer_column---------------------------------->
</div>
</body>
</html>
NewList.aspx.cs界面
using System;
using System.Collections.Generic;
using Model;
using BLL;
using System.Text;
namespace WebPage
{
public partial class NewList : System.Web.UI.Page
{
public string StrHtml { get; set; }
public int PageIndex{ get; set; }
public int PageCount { get; set; }
/// <summary>
/// 页面加载完成以后执行Load事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
int pageSize = 1;//每页显示的数据条数
int pageIndex;//页数
if (!int.TryParse(Request.QueryString["pageIndex"],out pageIndex))
{
pageIndex = 1;//默认为首页
}
userInfoBLL bll = new userInfoBLL();
int pagecount = bll.GetRecordCount(pageSize); //获取当前总页数
pageIndex = pageIndex < 1 ? 1 : pageIndex;//如果当前页小于第一页,则显示第一页
pageIndex = pageIndex > pagecount ? pagecount : pageIndex;//如果当前页大于总页数,则显示最后一页
PageIndex = pageIndex;//获取当前索引页
PageCount = pagecount;//获当前总页数,也就是最后一页
//获取分页数据
List<userInfo> list = bll.GetPageList(pageIndex,pageSize);
StringBuilder sb = new StringBuilder();
//遍历实体信息
foreach (userInfo user in list)
{
sb.AppendFormat("<li><span>{0}</span><a href='#' target='_blank'>{1}</a></li>",
user.regTime.ToShortDateString(), user.userName);
}
//将遍历结果给StrHtml
StrHtml = sb.ToString();
}
}
}
封装好的数字分页类:PageBarHelper.cs
using System.Text;
namespace Common
{
public class PageBarHelper
{
public static string GetpageBar(int pageIndex,int pageCount)
{
if (pageCount == 1)//如果总页数为1,
{
return string.Empty;
}
int start = pageIndex - 5;//计算起始位置,假如我们每页显示10个数字页,当点击第五页是,显示的5——14页,例如第一页为1,1-5=-4不存在该页,则显示第一页
if (start < 1)//如果起始页小于1,显示第一页,如果以五为间距的话,前四页都为负数
{
start = 1;
}
int end = start + 9;//计算终止位置,起始页加9(如果每页显示20个数字页呢?就是当前数字页+19)
if (end > pageCount)//不能超过总页数,超过显示最后一页,但是还是显示10个数字分页,所以需要重新计算数字分页
{
end = pageCount;
//重新计算start的值。
start = end - 9 < 1 ? 1 : end - 9;
}
StringBuilder sb = new StringBuilder();
//如果当前页大于第一页,则显示上一页的链接
if (pageIndex > 1)
{
sb.AppendFormat("<a href='NewList.aspx?pageIndex ={0}'>上一页</a>", pageIndex - 1);
}
//显示数字分页(10个数字分页)
for (int i = start; i <= end; i++)
{
if (i == pageIndex)
{
sb.Append(i);//如果访问当前页,则不需要添加超链接
}
else
{
sb.AppendFormat("<a href='newList.aspx?pageIndex={0}'>{0}</a>", i);
}
}
//如果当前页小于总页数,则显示下一页的链接
if (pageIndex <pageCount )
{
sb.AppendFormat("<a href='NewList.aspx?pageIndex ={0}'>下一页</a>", pageIndex + 1);
}
return sb.ToString();
}
}
}
效果展示:
今天的分享就先到这里,未完待续!