1. 程式人生 > >【牛腩】 網站真假分頁徹底實現

【牛腩】 網站真假分頁徹底實現

前言:

原本以為今天就要釋出系統成功了,但是在牛腩的最後一集,出來了一個重要的知識點,那就是真假分頁,如果有感興趣的朋友,或者還不是很明白真假分頁的朋友們,可一定要看接下來的內容!因為這裡有正解!

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的大門,前方是一路順風,還是一路大坑呢。。。算了管它是啥,快點認真的跑吧!還有就是如果解決了你的問題,記得點個贊!