博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
真分页和假分页
阅读量:2242 次
发布时间:2019-05-09

本文共 4219 字,大约阅读时间需要 14 分钟。

  最近做过的项目中都需要翻页功能,而翻页的数据有多又少,经过实践写出了这篇博文。

  当要显示数据量足够大的时候,我们往往采用分页显示的处理办法。分页有真分页和假分页。
  假分页
  从数据库中取出所有的数据,然后分页在界面上显示。访问一次数据库,但由于选择的数据量比较大,所以第一次花费时间比较长,但之后每一页的显示都是直接、快速的,避免对数据库的多次访问。
  真分页
  确定要显示的数量和内容,然后每次都去数据库取出该少量数据,优点是数据量小,缺点是访问数据库频繁。在大型网站中往往采用真分页,比如百度的图片获取。
  区别
  所谓的真假分页的实质区别在于:1.是否每次翻页都需要查询数据;2.预测查询结果数据集是否庞大。
  在新闻发布系统采用真分页。Web层用AspNetPager控件和Repeater控件显示。在后端设计思路如下:
  查询所有新闻的记录总数,从而得到AspNetPager的RecordCount属性值。设置PageSize属性,确定每页显示的记录条数。以上两个属性就可以确定所有这些记录要分多少页显示。由控件的StartRecordIndex和EndRecordIndex属性可以确定当前页要显示的记录起止索引号,从而可以方便的从数据库中查询。查询得到的datatable即为repeater绑定的数据源。
  


代码如下

web端代码:

Web层后台代码:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using BLL;using Model;using System.Data;using System.Data.SqlClient;namespace niunan.admin{    public partial class NewsManager : System.Web.UI.Page    {        BLL.NewsManager newm = new BLL.NewsManager();        protected void Page_Load(object sender, EventArgs e)        {            #region 加载分页            if (!Page.IsPostBack)            {                DataTable dt = newm.SelectAll();                AspNetPager1.RecordCount = dt.Rows.Count;                Bind_News();            }            #endregion        #region 分页绑定新闻        ///         /// 分页绑定新闻        ///         private void Bind_News()        {            int startIndex = AspNetPager1.StartRecordIndex;            int endIndex = AspNetPager1.EndRecordIndex;            DataTable dt = newm.SelectToPage(startIndex, endIndex);            repNews.DataSource = dt;            repNews.DataBind();        }        #endregion        #region 分页按钮改变事件        ///         /// 分页按钮改变事件        ///         ///         ///         protected void AspNetPager1_PageChanged(object sender, EventArgs e)        {            Bind_News();        }        #endregion    }}

BLL层(NewsManager.cs)代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using DAL;using Model;using System.Data;using System.Data.SqlClient;namespace BLL{  public  class NewsManager    {        private NewsDAO ndo;        public   NewsManager()        {            ndo = new NewsDAO();        }        #region 选择全部新闻        ///         /// 选择全部新闻        ///         /// 
public DataTable SelectAll() { return ndo.SelectAll(); } #endregion #region /// 分页选择新闻 /// /// /// 选定页的第一条新闻索引 /// 选定页的最后一条新闻索引 ///
选定页的新闻内容
public DataTable SelectToPage(int startIndex, int endIndex) { DAL.NewsDAO nd = new DAL.NewsDAO(); return nd.SelectToPage(startIndex,endIndex); } #endregion }}

DAL层(newsDAL.cs)代码:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;using System.Data.SqlClient;using DAL;using Model;namespace DAL{    public class NewsDAO    {        private sqlhelper sqlhelper;        public NewsDAO()        {            sqlhelper = new sqlhelper();        }        #region 选择全部新闻        ///         /// 选择全部新闻        ///         /// 
public DataTable SelectAll() { DataTable dt = new DataTable(); string sql = "select * from news"; dt = new sqlhelper().ExecuteQuery(sql, CommandType.Text); return dt; } #endregion #region 分页选择新闻 /// /// 分页选择新闻 /// /// 选定页的第一条新闻索引 /// 选定页的最后一条新闻索引 ///
选定页的新闻内容
public DataTable SelectToPage(int startIndex, int endIndex) { DataTable dt = new DataTable(); SqlParameter[] paras = new SqlParameter[] { new SqlParameter ("@startIndex",startIndex ), new SqlParameter("@endIndex",endIndex) }; string sql = "select * from (select ROW_NUMBER() over (order by id desc) as row,T.* from news T) as TT where TT.row between @startIndex and @endIndex"; dt = sqlhelper.ExecuteQuery(sql, paras, CommandType.Text); return dt; } #endregion }}

最终效果图如下:

这里写图片描述

你可能感兴趣的文章
【MyBatis学习10】高级映射之多对多查询
查看>>
【MyBatis学习11】MyBatis中的延迟加载
查看>>
【MyBatis学习12】MyBatis中的一级缓存
查看>>
【MyBatis学习13】MyBatis中的二级缓存
查看>>
【MyBatis学习14】MyBatis和Spring整合
查看>>
【MyBatis学习15】MyBatis的逆向工程生成代码
查看>>
Java 中 final、finally 和 finalize 使用总结
查看>>
volatile关键字解析
查看>>
单例模式的八种写法比较
查看>>
比较常见的数据库SQL面试题以及答案
查看>>
MySQL与Oracle的区别
查看>>
关于Oracle数据库优化的几点总结
查看>>
69道Spring面试题和答案
查看>>
40个Java多线程问题总结
查看>>
Oracle数据库面试题
查看>>
java面试中的智力题
查看>>
本地如何连接hbase数据库
查看>>
Maven出错-Missing artifact org.apache.openejb:openejb-core:jar:4.1.0-SNAPSHOT:test
查看>>
dubbo配置文件xml校验报错
查看>>
eclipse生成export生成jar详解
查看>>