Welcome 微信登录

首页 / 网页编程 / ASP.NET / 分页解决方案之分页算法——Pager_SQL的详细使用方法和注意事项

分页解决方案之分页算法——Pager_SQL的详细使用方法和注意事项2011-03-19 博客园 金色海洋上一次有点匆忙,如何使用介绍的不是太清楚,而且这两天有改掉了几个bug,所以这次呢详细说一下,然后更新一下代码和demo。

源代码和demo的下载:http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html

JYK.Controls.Pager.QuickPagerSQL PagerSQL = new QuickPagerSQL();

//设置保存属性的位置。可以不保存,也可以保存在隐藏域、Cookie、Session等地方。默认保存在隐藏域里面
//这里设置为不保存
PagerSQL.SaveLocation = JYK.Common.SaveViewStateLocation.NoSave;

//设置密钥。不保存忽略该属性。八位的数字。空字符串表示不加密,null表示使用默认密钥
//这里不需要设置,也就是不加密
//PagerSQL.SaveKey = "12121212";

//设置属性
PagerSQL.TableName = "News_NewsInfo"; //表名或者视图名称
PagerSQL.TableShowColumns = "*"; //需要显示的字段
PagerSQL.TableIDColumn = "NewsID"; //主键名称,不支持复合主键
PagerSQL.TableOrderByColumns = "NewsID"; //排序字段,根据分页算法而定,可以支持多个排序字段
PagerSQL.TableQuery = ""; //查询条件

PagerSQL.PageSize = 4; //一页显示的记录数


//选择分页算法
PagerSQL.SetPagerSQLKind = PagerSQLKind.MaxMin;

//拼接分页算法
PagerSQL.CreateSQL();

//获取统计记录数的SQL语句,比如 select count(1) from Table
string sql = PagerSQL.GetRecordCountSQL;

//设置总记录数,您可以使用PagerSQL.GetRecordCountSQL返回的SQL语句到数据库里面查询
//这里就简化操作,直接设置一个数值了。
PagerSQL.PageCount = 100;
//计算总页数,防止传入的页号不在有效地范围内,而产生无效的SQL语句。
PagerSQL.ComputePageCount();

//获取SQL语句。如果想得到第三页的SQL,那么传递“3”就可以了。
//如果传入的页号大于总页数,那么会返回最后一页的SQL语句。
//如果页号小于1,会返回第一页的SQL语句。
sql = PagerSQL.GetSQLByPageIndex(3) ;

FAQ:

1、为什么要有一个保存位置的设置?

由于Pager_SQL是从QuickPager分页控件里面分离出来的,所以他的目的要能够适应web控件的特点。如果您自己编写过自定义控件的话,那么您可能会遇到这样的问题:明明我在Page_Load里面给控件的属性赋值了,但是在回发(提交表单)的时候却提示我没有给属性赋值(属性值为空)。这是为什么呢?原因就在于在回发的时候Page_Load被延后执行了。

那么要如何解决这个问题呢?一是在Oninit里面赋值,一是在控件内部把属性值保存在Viewstate里面。而我这采用了后者。Viewstate里面的东东谁然看起来乱七八糟的,但是很容易就可以把它变成能够看懂的信息,那么如果把表名、字段名这些敏感的信息放在Viewstate里面显然是不安全的,所以我就自己写了一个类库,可以把信息保存在隐藏域(当然也可以是Cookie、Session等)里面,然后还可以设置密钥,这样没有密钥的话是不能破解的,除非暴力破解或者瞎蒙。

当然了现在Pager_SQL已经独立出来了,有的时候是不需要保存的,或者您觉得保存在客户端了即使加密也是不安全的,那么您可以选择不保存。

为了能够满足不同的需要,所以设置了这两个属性,一个是选择保存信息的位置(当然可以不保存),另一个就是加密用的密钥。