前言
牛腩的最后一集讲了真假分页,因为数据多的时候一页全是数据,给用户的体验很不好,数据太多显示在一起浏览器也会出错,这时候就用到分页了,分页的方式有多种,下面主要是用控件实现分页,分页又分为了真分页和假分页,那么这两者的区别时什么呢?
什么是真假分页
真分页:
- 只查询当前页面的要显示的内容。每次跳转页面也都要查询数据库取对应数据。
- 优点:查询速度快,用户体验度高
- 缺点:访问数据库频繁
当数据量比较大时,适合用真分页技术。大型网站采用的都是真分页,比如百度图片淘宝等。**
假分页:
- 从数据库获取所有数据,然后分页在界面上显示。
- 缺点:当数据量比较大时,这种分页方法会造成查询速度慢, 使用户体验度降低,但仅仅是第一次花费时间长,不清除缓存的情况下之后每一页显示都是直接快速的。
- 优点:设置简单,跳页速度较快。避免了多次对数据库的访问
GridView控件实现假分页
假分页用利用的是GridView控件的分页功能,将控件添加到要进行分页的aspx界面上
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnSelectedIndexChanging="GridView1_SelectedIndexChanging" PageSize="5"></asp:GridView>
</form>
后端代码:
protected void Page_Load(object sender, EventArgs e)
{
//加载页面,绑定数据
if (!Page.IsPostBack)
{
BindNews();
}
}
private void BindNews()
{
GridView1.DataSource = new NewsManager().SelectAll();
GridView1.DataBind();
}
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindNews();
}
设置GridView控件的属性:
AllowPaging(允许分页属性):true
PageSize(页面显示数量):5
效果:
AspNetPage控件实现真分页
- 需要引入AspNetPager.dll 网上可以下载到,下载地址:点这里去下载
- 在项目的bin文件夹下引用AspNetPager.dll ,然后在工具箱添加ASPNetPager控件如图:
工具箱这时候就有了AspNetPager控件,把这个控件拖入我们需要分页的页面,newsmanager.aspx中,然后设置分页空间样式:
<webdiyer:AspNetPager ID="anp" runat="server" FirstPageText="首页" LastPageText="尾页" NextPageText="下一页" PrevPageText="上一页" OnPageChanged="anp_PageChanged" PageSize="5" AlwaysShow="true">
</webdiyer:AspNetPager>
在后台界面编写代码U层:
protected void Page_Load(object sender, EventArgs e)
{
//判断session是否存在管理员
if (Session["admin"] != null && Session["admin"].ToString() == "niunan")
{
//已登录
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 startIndex = anp.StartRecordIndex;//开始记录数
int endIndex = anp.EndRecordIndex;//结束记录数
repNews.DataSource = new NewsManager().SelectByPage(startIndex, endIndex);
repNews.DataBind();
}
protected void anp_PageChanged(object sender,EventArgs e)
{
//空间切换实现数据库的交互
BindNews();
}
B层:
public DataTable SelectByPage(int starIndex,int endIndex)
{
return ndao.SelectByPage(starIndex, endIndex);
}
D层:
public DataTable SelectByPage(int startIndex,int endIndex)
{
DataTable dt = new DataTable();
string sql= "with template as (select ROW_NUMBER() over(order by id desc) as 行号,*from news)select * from template where 行号 between @startIndex and @endIndex";
SqlParameter[] paras = new SqlParameter[]
{
new SqlParameter("@startIndex",startIndex),
new SqlParameter("@endIndex",endIndex)
};
dt = new SQLHelper().ExecuteQuery(sql, paras, CommandType.Text);
return dt;
}
效果:
总结
牛腩最后的分页已经完成了,真假分页是各有优缺点,根据情况可以选择使用,因为牛腩是BS的第一个项目,跟着牛腩老师敲,很多地方还不是太明白,但是收获还是很大,学习到了HTML、ASP.NET、Ajax、JQuery,CSS的一些皮毛,相信在时候的学习中,会学到更多。