牛腩新闻发布系统 (五)如何让你的文章学会分页

分页

在软件开发的过程中,那些最常见的东西我们常常会忽略。例如这个"分页"。“分页”也有“真假”之说。

 

假分页:从数据库中一次性选择所有数据,再将所有数据根据每页显示多少条记录进行分类。其缺点是在数据比较多时,加载时间会长,优点使可以减少和后台的交互次数。

真分页:只从数据库中选择当前页的数据,跳转下一页是再次读取。缺点是与后台交互次数比较多,优点使每次加载速度比较快。

 

接下来笔者就以真分页为例,实现下图新闻的分页

 

 

实现分页

 <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)
        {
            UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;

            //判断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");
            }
        }

        //删除按钮
        protected void lbtnDel_Click(object sender, EventArgs s)
        {
            string id = ((LinkButton)sender).CommandArgument;
            bool b = new NewsManager().Delete(id);
            if (b)
            {
                BindNews();
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('未知原因导致删除失败!');</script>");
            }
        }


        #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>重新生成下文件,分页功能便出来了~

 

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值