【牛腩】 网站真假分页彻底实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jerry11112/article/details/84349484

前言:

原本以为今天就要发布系统成功了,但是在牛腩的最后一集,出来了一个重要的知识点,那就是真假分页,如果有感兴趣的朋友,或者还不是很明白真假分页的朋友们,可一定要看接下来的内容!因为这里有正解!

1、问题引入

如图下所示,当我们在浏览新闻时,由于新闻数量非常的多我们必须要进行分页
在这里插入图片描述

2、我们想要的结果

在这里插入图片描述

如果看着很抽象,那么我们看一下csdn评论博客的截图,它是每20条评论就有一个分页的,如下图所示:
在这里插入图片描述
问题引入完毕,现在我们进行分页:

3、真假分页

假分页:

如果第一次查询从数据库中取出全部数据,就是假分页,因为它跟界面展示的不一致,“表里不一”,就是假。访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接、快速的,避免对数据库的多次访问。

那么假分页如何实现呢,如图只需要在你的的aspx界面中写下这些就好了,这句话的意思就是每页份5个新闻!剩下的后端内容绑定,我就不写了。主要介绍真分页!

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="5">
    </asp:GridView>

在这里插入图片描述

真分页:

确定要显示的数量和内容,然后每次都去数据库取出该少量数据,优点是数据量小,缺点是访问数据库频繁。在大型网站中往往采用真分页。

由于当数据量较大的时候,假分页就不适合了,但是我们的网站一般的记录都是比较多的,这里咱们详细介绍一下真分页是如何实现的!

接下來詳細的解決真分页:

(1)下载AspNetPager分页控件

下载地址http://write.blog.csdn.net/postedit

(2)将分页导入工具箱,导入工具箱之前先进行引用

引用操作:如果找不到就点击 浏览 到下载软件的地方,找到引用上就好了

在这里插入图片描述

导入工具箱:如下,右击标准下边的地方,弹出一个框,点击选择项,等一会,点击浏览,找到自己的控件,点击添加就好了,在你的工具箱的最下边就是你的AspNetPager控件了

在这里插入图片描述

(3) 接下来将你的AspNetPager控件拖入到你要进行分页的aspx页面中,然后写上如下代码!

             <webdiyer:AspNetPager ID="AspNetPager1" runat="server" NumericButtonCount="5"
                OnPageChanged="AspNetPager1_PageChanged" PageSize="6"
                CustomInfoHTML="      总计%RecordCount%条记录,共%PageCount%页"
                FirstPageText="  首页"
                LastPageText=" 尾页"
                NextPageText="下一页"
                PrevPageText="上一页"
                ShowCustomInfoSection="left"
                ShowPageIndexBox="Never"
                CssClass="pages"
                CurrentPageButtonClass="cpb"
                AlwaysShow="true">
            </webdiyer:AspNetPager>

(4)前端页面搞定,现在该看后端了,页面加载(相当于u层)

        /// <summary>
        ///绑定
        /// </summary>
       private void BindNews()
        {
            repNews.DataSource = new NewsManager().FenYeSelectALL(AspNetPager1.StartRecordIndex, AspNetPager1.StartRecordIndex+4);    //+4是为了加载的时候就有5条记录
            repNews.DataBind();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
                //已登陆
                if (!Page.IsPostBack)
                {
                    //页面第一次加载时,绑定类别列表
                    BindNews()
                    //查询出了记录的总数
                    AspNetPager1.RecordCount = new NewsManager().SelectAll().Rows.Count;
                }
        }

(5)D层,

这里最难的就是sql查询语句,具体想知道这句话到底是干嘛的,自己放在sql中查查就知道了,篇幅太长了,我就不给大家展示为什么了!

        /// <summary>
        /// 选择全部新闻
        /// </summary>
        /// <returns></returns>
        public DataTable SelectAll()
        {
            DataTable dt = new DataTable();
            string sql = "select * from news";
            dt = new SQLHelper().ExecuteQuery(sql, CommandType.Text);
            return dt;
        }

        /// <summary>
        /// 选择当页的全部新闻
        /// </summary>
        /// <param name="startIndex"></param>
        /// <param name="endIndex"></param>
        /// <returns></returns>
        public DataTable FenYeSelectALL(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;
        }

(6)B层

        /// <summary>
        /// 选择全部新闻
        /// </summary>
        /// <param name="startIndex"></param>
        /// <param name="endIndex"></param>
        /// <returns></returns>
        public DataTable FenYeSelectALL(int startIndex, int endIndex)
        {
            return ndao.FenYeSelectALL(startIndex, endIndex);
        }


        #region 选择全部新闻

        /// <summary>
        /// 选择全部新闻
        /// </summary>
        /// <returns></returns>
        public DataTable SelectAll()
        {
            return ndao.SelectAll();
        }

用了半天的时间, 将真假分页吃掉了!大功告成!

后记:

牛腩结束了,学到了很多的知识,它也给我打开了b/s的大门,前方是一路顺风,还是一路大坑呢。。。算了管它是啥,快点认真的跑吧!还有就是如果解决了你的问题,记得点个赞!

猜你喜欢

转载自blog.csdn.net/jerry11112/article/details/84349484