首页 > 代码库 > 分页管理(编辑中)

分页管理(编辑中)

 

分页管理的目标

前面博文中,通过自行构造HTML表格代码,可以生成易于管理、易于扩展的数据列表。但在实际应用中,数据量动则成百上千,单一页面根本无法完全显示所有数据。把所有数据进行分页后逐页显示,是当前比较流行的数据展示方式。因此,我们需要研究和表格方式展示数据相适应的分页管理机制。

分页显示的核心,是根据页面记录数、页号、查询条件、排序顺序等因素,在数据库中查出该页相对应的数据集(DataTable)。按页返回数据集的功能,已经作为一个基本的功能被封装到AccessDB中了,通过AccessDB.GetPage就可以直接获取。因此,我们只需要关心执行查询以外的各种管理和操作,包括以下方面:

  • 获取总记录集的记录数
  • 页码的有效性的检验
  • 查询条件的传递和应用
  • 向任意页面跳转的支持
  • 分页器的样式控制

状态的保持和传递

分页管理的目的就是要对多个相互关联的页面进行管理,这些页面之间存在着联系,因此必须要能够把当前页面的某些重要状态传递给下一个页面。这些状态包括:

  • 数据表名
  • 当前页号
  • 页面大小
  • 当前查询条件
  • 当前排序条件

ASPX有多种方式在页面间传递状态,如Cookie、Session、URL参数等。其中,以URL参数进行状态传递,是当前很多分页工具的普遍做法。综合考虑需求,使用URL传递参数,需要定义以下参数:

  • TableName
  • PageNo
  • PageSize
  • strWhere
  • strOrder

分页的管理在页面中的体现就是分页器,即一组链接按钮和文字信息,通过它们可以了解当前分页信息,进行各种分页的跳转。有了上述的参数定义后,就可以定义分页的几个主要链接的形式。和前面的表格生成工具相一致,我们把分页器的HTML代码生成也封装到一个函数中:


public string GetPager(int pagecount, int currentpage, string urlpara)
{
	string strPager = "";
	strPager += "<a href=http://www.mamicode.com/‘?PageNo=1" + urlpara + "‘>首页</a>";
	strPager += " <a href=http://www.mamicode.com/‘?PageNo=" + (currentpage - 1 < 1 ? 1 : currentpage - 1).ToString() + urlpara + "‘>上页</a>";
	strPager += " " + currentpage.ToString() + "/" + pagecount.ToString();
	strPager += " <a href=http://www.mamicode.com/‘?PageNo=" + (currentpage + 1 > pagecount ? pagecount : currentpage + 1).ToString() + urlpara + "‘>下页</a>";
	strPager += " <a href=http://www.mamicode.com/‘?PageNo=" + pagecount.ToString() + urlpara + "‘>末页</a>";

	return strPager;
}

通过语句调用:

strContent += GetPager(20,1,"");

达到HTML结果如下:


  <a href=‘?PageNo=1‘>首页</a> <a href=‘?PageNo=1‘>上页</a> 1/20 <a href=‘?PageNo=2‘>下页</a> <a href=‘?PageNo=20‘>末页</a>

页面显示效果如下:

image

 

数据的获取

通过传入的参数,就可以进行页面数据的获取了。由于页面是通过URL传递参数的,因此,查询前必须对总的记录数进行查询,以便进行分页判断。获取记录的流程是:

取得参数——查询总记录——判断范围,修正页码——查询记录集——构造分页器代码

代码如下:

效果显示如下:

 

查询结果的分页

查询是数据管理的一个常用功能,对于查询的结果,也需要和浏览所有数据记录一致,采用相同的模式进行操作。所以在每个页面显示是,还需要把查询的条件综合考虑进来。

因为数据表名已经作为参数传递了,因此,需要传递的是其他的条件,如条件和排序字段等。

在实际应用中,查询条件往往是中文的,因此还需要对strWhere进行编码和解码,把中文转换成为URL可以识别的UTF8编码。

同时,由于查询的处理,往往是在按下一个查询按钮后进行,因此查询本身是一个回调过程,必须要处理好数据的加载的流程。处理逻辑如下:

查询处理页面:

构造strwhere,保存

 

数据加载方法:

获取strwhere,查询,分页器中传递strwhere

跳页的实现

除了按顺序浏览,很多页面数量往往非常巨大,因此分页器还需要支持跳页,可以向任意页面跳转。由于通过URL参数进行控制,实际非常简单,参数一修改即可。实现则需要通过js来实现。

 

分页器的样式

分页功能几乎是每个数据管理页面都需要的,但其样式总的来说,不会有太多的变化,因此,写好一个通用性较强的样式,就可以到处使用了。这是一个常用的分页器样式。