1. 程式人生 > >牛腩新聞釋出系統 (五)如何讓你的文章學會分頁

牛腩新聞釋出系統 (五)如何讓你的文章學會分頁

分頁

在軟體開發的過程中,那些最常見的東西我們常常會忽略。例如這個"分頁"。“分頁”也有“真假”之說。

 

假分頁:從資料庫中一次性選擇所有資料,再將所有資料根據每頁顯示多少條記錄進行分類。其缺點是在資料比較多時,載入時間會長,優點使可以減少和後臺的互動次數。

真分頁:只從資料庫中選擇當前頁的資料,跳轉下一頁是再次讀取。缺點是與後臺互動次數比較多,優點使每次載入速度比較快。

 

接下來筆者就以真分頁為例,實現下圖新聞的分頁

 

 

實現分頁

 <1>編寫儲存過程。分頁針對的是查詢到的資料,所以這裡涉及到資料庫的操作。按照如下程式碼,新建你的儲存過程

 

 

<2> 在D層呼叫儲存過程。筆者在D層NewsDAO檔案中編寫程式碼,目的是實現顯示出的新聞內容分頁

        # region 顯示新聞分頁
        /// <summary>
        /// 新聞分頁顯示
        /// </summary>
        /// <param name="start">開始</param>
        /// <param name="end">結束</param>
        /// <returns></returns>
        public DataTable SelectPage(int start, int end)
        {
            DataTable dt = new DataTable();
            string cmdText = "procNewsSelectPage";
            SqlParameter[] paras = new SqlParameter[] {
                new SqlParameter("@start",start),
                new SqlParameter("@end",end),
            };
            dt = sqlhelper.ExecuteQuery(cmdText, paras, CommandType.StoredProcedure);
            return dt;
        }
        #endregion

 

<3>在Web層中新增分頁控制元件AspNetPager,並完善此控制元件程式碼。筆者在newsmanager.aspx檔案中新增的程式碼

            <webdiyer:AspNetPager ID="anp" runat="server" FirstPageText="首頁" LastPageText="尾頁" NextPageText="下一頁" PrevPageText="上一頁" OnPageChanged="anp_PageChanged" PageSize="5" AlwaysShow="true">
            </webdiyer:AspNetPager>

 

 

<4>B層對應程式碼。筆者寫在了B層NewsManager檔案裡

        #region 新聞分頁
        //分頁
        public DataTable SelectNewsByPage(int start, int end)
        {
            return ndao.SelectPage(start, end);
        }
        #endregion

 

<5>在Web層新聞管理newsmanager.aspx.cs後臺編寫程式碼。由於後臺檔案中其他功能已寫入程式碼,筆者只列出分頁功能需要加的程式碼

        protected void Page_Load(object sender, EventArgs e)
        {

            //判斷session裡面是否存在管理員
            if (Session["admin"] != null && Session["admin"].ToString() == "niunan")
            {
                //已登入
                if (!Page.IsPostBack)
                {
                    anp.RecordCount = dt.Rows.Count;
                    BindNews();
                }
            }
            else
            {

            }
        }



        #region 繫結新聞列表
        private void BindNews()
        {
            int start = anp.StartRecordIndex;
            int end = anp.EndRecordIndex;
            repNews.DataSource = new NewsManager().SelectNewsByPage(start,end);
            repNews.DataBind();
        }
        #endregion

        protected void anp_PageChanged(object sender, EventArgs e)
        {
            BindNews();
        }

 

 

<6>重新生成下檔案,分頁功能便出來了~