牛腩—分页制作

       牛腩中用到了分页制作,本文就来介绍一下如何实现该功能。

       首先我们先了解一下真假分页的区别:

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

       假分页:从数据库中取出所有的数据,然后分页在界面上显示。访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接、快速的,避免对数据库的多次访问。

       通过上面的简单介绍我们也可以看出两者之间的区别,假分页在遇到数据量很大的情况下弊端非常明显,真分页可以很好的弥补这一缺陷,下面就介绍一下如何使用AspNetPager控件实现真分页的制作:

      先将我们的存储过程写出来,如下:

Create PROCEDURE [dbo].[news_selectByPage]  
@startIndex int,  
@endIndex int  
AS  
BEGIN  
With temptbl as (  
SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS Row,* from news   
  
)  
SELECT * FROM temptbl where Row between @startIndex and @endIndex  
  
END 
GO

      接下来就从后往前写,D层代码如下:

#region 选择分页记录
        /// <summary>
        /// 选择分页记录
        /// </summary>
        /// <param name="startIndex"></param>
        /// <param name="endIndex"></param>
        /// <returns></returns>
        public DataTable SelectNewsByPage(int startIndex, int endIndex)
        {

            DataTable dt = new DataTable();
            string sql = "news_selectByPage";
            SqlParameter[] paras = new SqlParameter[] { 
                 new SqlParameter("@startIndex",startIndex),  
                 new SqlParameter("@endIndex",endIndex)};
            dt = sqlhelper.ExecuteQuery(sql, paras, CommandType.StoredProcedure);
            return dt;

        }
        #endregion

      B层:

#region 分页选择记录
        /// <summary>
        /// 分页选择记录
        /// </summary>
        /// <param name="startIndex"></param>
        /// <param name="endIndex"></param>
        /// <returns></returns>
        public DataTable SelectNewsByPage(int startIndex,int endIndex)
        {
            return ndao.SelectNewsByPage(startIndex, endIndex);
        }
        #endregion

     Web:

    public partial class newsmanager : System.Web.UI.Page
    {
        NewsManager nm = new NewsManager();

        protected void Page_Load(object sender, EventArgs e)
        {
            // 判断session里面是否存在管理员
            if (Session["admin"] != null && Session["admin"].ToString() == "niunan")
            {
                // 已登陆
                if (!Page.IsPostBack)
                {
                    //设定分页控件总的记录条数(总的记录条数/每页的记录条数Pagesize=页数)  
                    DataTable dt = new DataTable();
                    dt = nm.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 startIndex = anp.StartRecordIndex;
            int endIndex = anp.EndRecordIndex;
            DataTable dt = nm.SelectNewsByPage(startIndex, endIndex);

            repNews.DataSource = dt;
            repNews.DataBind();
        }
        #endregion

        protected void anp_PageChanged(object sender, EventArgs e)
        {

            //Response.Write("开始记录数:" + anp.StartRecordIndex + "<br>结束记录数" + anp.EndRecordIndex);  
            //当前页切换时,更新绑定的新闻  
            BindNews();
        }
    }
<webdiyer:AspNetPager ID="anp" runat="server" UrlPaging="True" AlwaysShow="true"
            FirstPageText="首页" LastPageText="末页" OnPageChanged="anp_PageChanged"
            NextPageText="下一页" PrevPageText="上一页"             
             PagingButtonSpacing="0px" NumericButtonCount="5"
            CssClass="anpager" CurrentPageButtonClass="cpb" Width="850px" CurrentPageButtonPosition="End" PageSize="5" >
        </webdiyer:AspNetPager>

      CSS样式:

.anpager {
    margin-left: 120px;
}

    .anpager .cpb {
        background: #1F3A87 none repeat scroll 0 0;
        border: 1px solid #CCCCCC;
        color: #FFFFFF;
        font-weight: bold;
        margin: 5px 4px 0 0;
        padding: 4px 5px 0;
    }

    .anpager a {
        background: #FFFFFF none repeat scroll 0 0;
        border: 1px solid #CCCCCC;
        color: #1F3A87;
        margin: 5px 4px 0 0;
        padding: 4px 5px 0;
        text-decoration: none;
    }

        .anpager a:hover {
            background: #1F3A87 none repeat scroll 0 0;
            border: 1px solid #1F3A87;
            color: #FFFFFF;
            margin-left: 20px;
        }
      内容很基础,需要不断积累。如有错误欢迎指正!


    

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值