通过一步一步的完善牛腩新闻发布系统,今天把分页这块做好了,挺开心的,下面来总结一下。
真分页:只从数据库中选择当前页的数据,跳转下一页是再次读取,每次加载的速度比较快,但是与后台交互次数比较多。
假分页:从数据库中一次性的选择所有数据,再将所有数据根据每页显示多少条记录进行分类。其缺点就是在数据比较多的时候,第一次加载时间比较长,但是可以减少与后台交互的次数。
真分页的实现:
1.下载AspNetPage的dll文件
2.添加引用:
3.代码实现
建立存储过程
USE [newssystem]
GO
/****** Object: StoredProcedure [dbo].[procNewsSelectPage] Script Date: 2017-08-20 10:32:54 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: 牛千千
-- Create date: 2017-08-19
-- Description: 真分页
-- =============================================
ALTER PROCEDURE [dbo].[procNewsSelectPage]
@startrecord integer,
@endrecord integer
AS
BEGIN
with temptbl as (
select ROW_NUMBER() over (order by id desc) as 行号, * from news)
select * from temptbl where 行号 between @startrecord and @endrecord
SET NOCOUNT ON;
END
DAL调用存储过程
public DataTable Paging(int startrecord,int endrecord)
{
// 新闻分页
DataTable dt = new DataTable();
string cmdText = "procNewsSelectPage";
SqlParameter[] paras = new SqlParameter[] {
new SqlParameter ("@startrecord",startrecord ),
new SqlParameter ("@endrecord",endrecord )
};
dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
return dt;
}
BLL层调用DAL层
public DataTable Paging(int startrecord, int endrecord)
{
// 新闻分页
return ndao.Paging(startrecord, endrecord);
}
Web层:在新闻管理newsmanager.aspx添加ASPNetPage控件,然后修改分页控件的样式
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" OnPageChanged="AspNetPager1_PageChanged2" FirstPageText ="首页" LastPageText ="尾页"
NextPageText ="下页" PrevPageText ="上页" PageSize ="5" AlwaysShow="True"> </webdiyer:AspNetPager>
在新闻管理后台newsmanager.aspx.cs编写代码
protected void Page_Load(object sender, EventArgs e)
{
//判断session里是否存在管理员
if (Session["admin"] != null && Session["admin"].ToString() == "niunan")
{
//已登录
if (!Page.IsPostBack)
{
AspNetPager1.RecordCount = new NewsManager ().SelectAll().Rows.Count;
BindNews();
}
}
else
{
//未登录
Response.Redirect("login.aspx");
}
}
#region 绑定新闻列表
private void BindNews()
{
int startrecord=AspNetPager1 .StartRecordIndex ;
int endrecord=AspNetPager1 .EndRecordIndex ;
repNews.DataSource = new NewsManager ().Paging (startrecord,endrecord);
repNews.DataBind();
}
#endregion
protected void AspNetPager1_PageChanged2(object sender, EventArgs e)
{
BindNews();
}
最终效果图
假分页的实现
利用GridView进行分页,现将所有数据都取出来,然后根据页码显示信息。
AllowPaging属性设置为TRUE(允许分页),PageSize设置为具体的数字(每页显示的条数)
/// <summary>
/// 加载页面时,绑定数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindNews();
}
}
private void BindNews()
{
GridView1.DataSource = new NewsManager().SelectAll(); //查询所有数据并绑定
GridView1.DataBind();
}
/// <summary>
/// 实现跳页时数据更新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindNews();
}
这是真假分页,不断积累不断进步。