ASP.NET真假分页—假分页



不考虑里面的内容只看布局,上面这张图片是不是你也遇到过呢?拖动滚动条,下面还有无数条的数据显示,那您就慢慢的拖吧。。。肯定大家都很反感这样吧?


当有大量数据的情况时,想要所有的内容都显示在同一页是不现实的,这时候就用到了分页技术。分页,听到这个词,你脑海中闪过的第一幅画面是什么?对,书,我们手中拿的数十页甚至上百页的书就是以分页的形式展示出来的,网站对内容的分页也是这样:对其进行分页显示,每页只显示一部分,这样一来就舒服多了。


分页技术


分页技术是Web开发中的最简单且广泛使用的技术之一,是实现动态网站的必不可少的功能,包含假分页和真分页两类。


下面先通过对比的方式来简单了解一下,接下来将分别进行详细介绍。



假分页


从表面含义来理解,“假”即有点似断非断,藕断丝连的意思。在此处表现为从数据库中取出所有的数据但是只显示有用的部分。接下来以gridview控件作为媒介进行介绍。


VS中新建一个项目,在Web窗体中拖入控件gridview,右击在快捷菜单中选择属性进行设置:将其AllowPaging属性设置为TRUE,在PageSize属性中设定每页显示的数据大小为5



对应以上操作在.aspx文件中会自动生成代码,当然您也可以在代码中通过手动输入进行设置。



在后台的代码设置:

  1. protected void Page_Load(object sender, EventArgs e) 
  2.        {           
  3.            if (!Page .IsPostBack )//窗体是第一次加载 
  4.            { 
  5.                string caid = Request.QueryString["caid"];   //获得传入的参数 
  6.                DataTable dt = new NewsManager().SelectAllNewsByCaId(caid);  //调用B层实现查询功能 
  7.                if (dt.Rows.Count != 0) 
  8.                { 
  9.                    lblCategory.Text = dt.Rows[0]["name"].ToString();  //使类别标题显示相应的类别名称 
  10.                } 
  11. //绑定gridview 
  12.                gvNew.DataSource = dt
  13.                gvNew.DataBind();     
  14.      } 
 protected void Page_Load(object sender, EventArgs e)
        {          
            if (!Page .IsPostBack )//窗体是第一次加载
            {
                string caid = Request.QueryString["caid"];   //获得传入的参数
                DataTable dt = new NewsManager().SelectAllNewsByCaId(caid);  //调用B层实现查询功能
                if (dt.Rows.Count != 0)
                {
                    lblCategory.Text = dt.Rows[0]["name"].ToString();  //使类别标题显示相应的类别名称
                }
 //绑定gridview
                gvNew.DataSource = dt;
                gvNew.DataBind();    
      }


程序运行后显示效果如下:



将查询到的结果每页只显示5条数据分为8页来显示,还是用一页显示40条记录,你喜欢哪个?


全心全意为人民服务,作为一个软件开发者,要站在用户的角度去审视和完善自己的作品 。



当数据量相对较小时,假分页可移植性高,可以优先考虑。但是当有上万条或者十几万条数据时,系统的运行性能就会明显下降。这时候就有了真分页的必要性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ASP.NET实现分页功能可以通过以下步骤实现: 1. 在后端代码中获取数据总数和每页显示的记录数。 2. 根据获取到的数据总数和每页显示的记录数计算出总页数。 3. 根据当前页码和每页显示的记录数获取要显示的数据。 4. 将获取到的数据绑定到前端控件上进行显示。 5. 在前端页面中添加分页控件,并设置当前页、总页数、每页显示的记录数等属性。 6. 添加事件处理程序,根据用户的操作重新获取数据并进行显示。 以下是一个使用ASP.NET Web Forms实现分页功能的示例代码: 后端代码: ```c# protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindData(); } } private void BindData() { int currentPage = 1;//当前页码 int pageSize = 10;//每页显示的记录数 string sql = "select count(*) from Products";//获取数据总数的SQL语句 int totalCount = Convert.ToInt32(DbHelperSQL.GetSingle(sql));//获取数据总数 int totalPages = (int)Math.Ceiling((double)totalCount / pageSize);//计算总页数 if (!string.IsNullOrEmpty(Request.QueryString["page"])) { currentPage = Convert.ToInt32(Request.QueryString["page"]);//获取当前页码 } int startIndex = (currentPage - 1) * pageSize + 1;//计算要显示的数据的起始位置 int endIndex = currentPage * pageSize;//计算要显示的数据的结束位置 sql = "select * from (select row_number() over (order by ProductID) as RowNumber, * from Products) as Temp where Temp.RowNumber between " + startIndex + " and " + endIndex;//获取要显示的数据的SQL语句 DataTable dt = DbHelperSQL.Query(sql).Tables[0];//获取要显示的数据 rptProducts.DataSource = dt;//将获取到的数据绑定到前端控件上进行显示 rptProducts.DataBind(); //设置分页控件的属性 pager.CurrentPageIndex = currentPage; pager.PageSize = pageSize; pager.RecordCount = totalCount; pager.Visible = true; } protected void pager_PageChanged(object sender, EventArgs e) { BindData();//重新获取数据并进行显示 } ``` 前端代码: ```html <asp:Repeater ID="rptProducts" runat="server"> <ItemTemplate> <div><%# Eval("ProductName") %></div> </ItemTemplate> </asp:Repeater> <asp:DataPager ID="pager" runat="server" OnPreRender="pager_PreRender" OnPagerCommand="pager_PageChanged"> <Fields> <asp:NumericPagerField ButtonCount="10" /> </Fields> </asp:DataPager> ``` 注意事项: 1. 在获取数据总数时,可以使用SQL语句或者ORM框架等方式。 2. 在获取要显示的数据时,需要使用类似于ROW_NUMBER() OVER (ORDER BY xxx)的方式来进行分页。 3. 在分页控件的事件处理程序中,需要重新获取数据并进行显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值