牛腩新闻发布系统最后一讲讲了真假分页,其实分页我们并不陌生,在网页中我们会经常看到,界面中不可能一次显示所有的东西,这时候就需要分页来帮忙,就像CSDN中评论页的显示就采用了分页。
【知识点】
1、是什么?如下:
假分页:从数据库中一次性选择所有数据,再将所有数据根据每页显示多少条记录进行分类。其缺点就是在数据比较多第一次加载时时间比较长,但是可以减少与后台的交互次数。
真分页:只从数据库中选择当前页的数据,跳转下一页是再次读取,每次加载的速度比较快,但是与后台交互次数比较多。
2、如何实现?
下面只说一下真分页的实现:
首先需要添加控件:AspNetPager(下载:点击打开链接 )
建立存储过程:
<span style="font-size:18px;">-- =============================================
-- Author: <RU>
-- Create date: <2015-05-17>
-- Description: <新闻分页>
-- =============================================
ALTER PROCEDURE [dbo].[procNewsSelectPage]
@start integer,
@end integer
AS
BEGIN
with tempt as (
select ROW_NUMBER() over(order by id desc)as row,*from news T)
select * from tempt where row between @start and @end
SET NOCOUNT ON;
END</span>
DAL层调用存储过程:(B层引用D层)
<span style="font-size:18px;"> #region 新闻分页显示
public DataTable SelectPage(int start, int end)
{
DataTable dt = new DataTable();
string cmdText = "procNewsSelectPage";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@start",start),
new SqlParameter("@end",end)
};
dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
return dt;
}
#endregion</span>
Web层:
在新闻管理newsmanager.aspx中编写如下代码:设置分页控件的样式
<span style="font-size:18px;"><webdiyer:AspNetPager ID="anp" runat="server" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" OnPageChanged="anp_PageChanged" PageSize="5" AlwaysShow="true">
</webdiyer:AspNetPager></span>
在新闻管理newsmanager.aspx.cs后台编写如下代码:
<span style="font-size:18px;">protected void Page_Load(object sender, EventArgs e)
{
//判断session里面是否存在管理员
if (Session["admin"] != null && Session["admin"].ToString() == "ru")
{
//已登录
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt = new NewsManager().SelectAll();
anp.RecordCount = dt.Rows.Count;
BindNews();
}
}
else
{
//未登录
Response.Redirect("login.aspx");
}
}
#region 绑定新闻列表
private void BindNews()
{
int start = anp.StartRecordIndex;
int end = anp.EndRecordIndex;
repNews.DataSource = new NewsManager().SelectPage(start, end);
repNews.DataBind();
}
#endregion
protected void anp_PageChanged(object sender, EventArgs e)
{
BindNews();
} </span>
这样就可以实现了,效果如下:
【小结】
真假分页开始本不想实现了,系统都发布成功了,最后听牛腩老师讲讲就算了,后来一想,还是实现一下吧!想想别的网页,分页的功能是必不可少的,以后肯定也会用到,早晚会用到,现在有机会为什么不实现一下呢。想半天也没用,还是自己动手试试比较实在,其实实现了之后也就觉得没什么了。