【牛腩发布系统】—真假分页的实现

前言

牛腩的最后一集讲了真假分页,因为数据多的时候一页全是数据,给用户的体验很不好,数据太多显示在一起浏览器也会出错,这时候就用到分页了,分页的方式有多种,下面主要是用控件实现分页,分页又分为了真分页和假分页,那么这两者的区别时什么呢?

什么是真假分页

真分页:

  • 只查询当前页面的要显示的内容。每次跳转页面也都要查询数据库取对应数据。
  • 优点:查询速度快,用户体验度高
  • 缺点:访问数据库频繁
    当数据量比较大时,适合用真分页技术。大型网站采用的都是真分页,比如百度图片淘宝等。**

假分页:

  • 从数据库获取所有数据,然后分页在界面上显示。
  • 缺点:当数据量比较大时,这种分页方法会造成查询速度慢, 使用户体验度降低,但仅仅是第一次花费时间长,不清除缓存的情况下之后每一页显示都是直接快速的。
  • 优点:设置简单,跳页速度较快。避免了多次对数据库的访问

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的一些皮毛,相信在时候的学习中,会学到更多。

猜你喜欢

转载自blog.csdn.net/a15076159739/article/details/86238416
今日推荐