牛腩新闻发布系统--分页学习(AspnetPager控件)

来源:互联网 发布:暮光女 出柜 知乎 编辑:程序博客网 时间:2024/05/20 06:07

前言

通过牛腩新闻发布系统的学习,了解了如何利用AspnetPager控件来对网页上的表格进行分页,这篇博客分享一下学习心得。

分页的由来

机房收费系统中大家对DataGridView控件的使用一定不陌生,它是用来显示数据的。同样的,在web开发中也有这样一个控件GridView使用原理大致相同,在处理数据显示上给予程序开发者极大的方便。 但是两者也同样都有一个致命的弊端,当数据过多时候,这个控件便显得有些费力了。 简单的来说,如果我们只有十来条数据,使用这个控件是没有问题的,但是如果我们有上千上完条数据需要查看的时候我们怎么办? 还是哪滚动条一点一点往下滚吗? 就算你愿意,用户也不会愿意。所以AspnetPager分页控件就来了。

什么是分页?

分页就是将数据库中获取到表格的数据分为若干个页面来显示。
举个例子:csdn博客评论,如果每个月评论80条,他就会分四页显示,每页20条数据。

分页的形式:

分页有两种形式:假分页,真分页。

假分页

利用GridView进行分页,先将所有数据都取出来,然后根据页码展示信息。
方法:AllowPaging属性设置为True(允许分页), PageSize属性设置具体数字。(每页想要显示的条数)。

真分页:

利用ASPNETPage分页控件来进行分页,只选取当前页要展示给用户的数据。
方法:且听小编慢慢道来。


1.添加ASPNETPage分页控件

分享一个下载地址:http://www.webdiyer.com/aspnetpager/downloads/
工具箱右键–选择项—.net framework组件(如果注册过了直接添加就好)—浏览—选择下载好的ASPNETPage.dll文件。然后将工具箱出现的分页控件拖到web页面上。

2.Web层,在newsmanager.aspx中编辑代码,设置分页格式:

方法1:

-- =============================================-- Author:      <Hepburn Yang>-- Create date: <2017-7-12 11:02:49>-- Description: <新闻列表分页显示>-- =============================================ALTER PROCEDURE [dbo].[news_SelectPage1]        @startIndex int,    @endIndex intASBEGIN --用一个临时表 temptbl 保存news表变动后的新表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

方法2:

-- =============================================-- Author:      <Hepburn Yang>-- Create date: <2017-7-12 11:02:49>-- Description: <新闻列表分页显示>-- =============================================ALTER PROCEDURE [dbo].[news_SelectPage2]    @page int   --页数ASBEGINSELECT top 5 *   from        (        SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM news     ) AWHERE RowNumber > 5 * (@page -1)END

代码解析:
方法2:
第一种方法需要传入参数,当前页的第一条数据的rownumber和最后的rownumber,即starIndex和endIndex;原理是,比如说我们要获取索引为15–20区间内的数据,只需要传入15 和20 即可。

第二种方法是存储过程里面以设定好了页面显示条数‘5’,当然,大家可以选择显示更多,或者定义变量传入参数可以让其可变。这种方法还要传入一个@page参数,是要获取当前页面的页码数。原理是:传入当前的页码比如说传入@page=6,即当前是第6页,5*(6-1)=25, 5*6=30,所以当前页面会自动显示索引为25-30的数据。
两种方式原理相同,只是传入参数不同计算方式有所不同罢了。上面两个方法我都试过,都可以查出来,还有其他很多方法,大家多查资料多实践。这里我采用了第一种方法。

4.D层,调用存储过程

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

5.B层,调用D层方法

  public DataTable SelectNewsPage(string startIndex,string endIndex)        {            return newsdao.SelectNewsbyPage(startIndex ,endIndex );        }

6.网页后台newsmanager.aspx.cs

    protected void Page_Load(object sender, EventArgs e)    {        if (Session["admin"] != null && Session["admin"].ToString() == "niunan")        {//已登录            if (!Page.IsPostBack)            {                //设定分页控件总得记录条数                Anp.RecordCount = new NewsBLL().SelectAll().Rows.Count;                BindNews();            }        }        else        {//未登录            Response.Redirect("login.aspx");        }                 }     //分页控件    protected void Anp_PageChanged(object sender, EventArgs e)    {        //Response.Write("开始记录数:" + anp.StartRecordIndex + "<br>结束记录数" + anp.EndRecordIndex);          //当前页切换时,更新绑定的新闻          BindNews();    }    //重构方法 --绑定新闻列表    private void BindNews()    {        //repNews.DataSource = new NewsBLL().SelectAll();  //假分页--选择全部新闻        repNews.DataSource = new NewsBLL().SelectNewsPage(Anp.StartRecordIndex.ToString(), Anp.EndRecordIndex.ToString());      //真分页--根据当前页起止记录的序号,从数据库中国魂选出区间内新闻。        repNews.DataBind();    }    

7.效果展示

下面就是最后的成果了,可以点击左右的箭头来实现切换前后页。
这里写图片描述

总结

分页功能经常会用到,实现方法有很多,原理大致一样,多实践,多积累。

原创粉丝点击