【牛腩】真假分页

  分页技术是数据中技术中经常用到的、也是全心全意为人们的服务理念的以后总体现。在现实生活中数据的信息比较多,这些信息往往不是人们全部需要的。所以用分页的技术方便用户翻阅页面,查找有用的信息。要是做到像百度和淘宝一样,根据用户平时阅读信息的习惯,自动配置首页的信息那就更贴心了!

  在牛腩新闻发布系统中提到两种分页的方式:1、假分页  2、真分页

  一、假分页

  GridView 控件分页


 public partial class text : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //开始绑定
                BindNews();
            }
        }
        #region 绑定新闻列表
        /// <summary>
        /// GridView 绑定数据源
        /// </summary>
           private void BindNews()
        {
            repNews.DataSource = new NewsManager().SelectAll();
            repNews.DataBind();
        }
        #endregion

        //实现翻页效果
        protected void repNews_PageIndexChanging1(object sender, GridViewPageEventArgs e)
        {
           repNews.PageIndex = e.NewPageIndex;
            BindNews();
        }
    }
     


  需要注意的是要设置Gridview的AllowPaging 为True

  通过代码也可以看出假分页是把数据库中的数据全部加载到前台,然后在前台分页。如果数据少的话,还可以接受。如果是几十万条信息,前台的压力就太大了。所以这这就引出了真分页技术。

  二、真分页

  控件设置代码:


<webdiyer:AspNetPager ID="anp" FirstPageText=" : 首页" LastPageText=" 尾页" NextPageText=" 下一页" runat="server" OnPageChanged="anp_PageChanged" PageSize="8" PrevPageText =" 上一页" CustomInfoHTML="共%RecordCount%条记录,共%PageCount%页 " ShowCustomInfoSection="Left" ShowPageIndexBox="Never" CssClass ="paginator" CurrentPageButtonClass="cpb" AlwaysShow="true" CustomInfoSectionWidth=""></webdiyer:AspNetPager>
    <asp:Repeater ID="repNews" runat="server">

  U层传入数据绑定数据源代码:


 public partial class newsmanager : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //判断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");
            }
        }

        #region 绑定新闻列表
        private void BindNews()
        {
            int startIndex = anp.StartRecordIndex; //开始记录数    
            int endIndex = anp.EndRecordIndex; //结束记录数   
            repNews.DataSource = new NewsManager().SelectByPage(startIndex, endIndex);
            repNews.DataBind();
        }
        #endregion

        #region 控件的切换实现数据库的数据交换
        /// <summary>
        ///控件的切换实现数据库的数据交换
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void anp_PageChanged(object sender, EventArgs e)
        {
            //控件的切换实现数据库的数据交互  
            BindNews();
        }
        #endregion

        #region 删除按钮
        /// <summary>
        /// 删除按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="s"></param>
        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>");
            }

        }
        #endregion
    }


  数据库中的存储过程


ALTER PROCEDURE [dbo].[partPage]    
    @startIndex int, --查询开始记录数    
    @endIndex int    --结束记录数    
AS    
BEGIN    
    
    with temptbl as (    
    SELECT ROW_NUMBER() OVER (ORDER BY id desc)AS 行号, * from news  --使得记录按顺序排列,按行号查询    
)    
SELECT * FROM temptbl where 行号 between @startIndex and @endIndex  --传入开始和结束的参数,执行查询  
    
END  

  这里的Repeater控件 也可以换成Gridview控件效果差不多。这里所讲的真分页重点还是AspNetPager控件在其作用。AspNetpager控件把每页的数据排成循序序列,通过点击页码传入数据库。告诉数据库要多少号到多少号的数据,而数据库中通过SQL代码把每条数据也排成有序数列。这样通过穿到数据库中的2个数就可在数据库中查询出那页的数据。也就实现了后台的分页。

  总结:在敲系统的时候要时时刻刻想着系统的效率,之前敲代码总是想着实现就行。万丈高楼平地起,想要走的更远,先把基本功打好。所以以后要努力做出完美的系统。


你可能感兴趣的:(【牛腩】真假分页)