上一次有点匆忙,如何使用介绍的不是太清楚,而且这两天有改掉了几个bug,所以这次呢详细说一下,然后更新一下代码和demo。
源代码和demo的下载:http://www.cnblogs.com/jyk/archive/2008/07/29/1255891.html








































FAQ:
1、为什么要有一个保存位置的设置?
由于Pager_SQL是从QuickPager分页控件里面分离出来的,所以他的目的要能够适应web控件的特点。如果您自己编写过自定义控件的话,那么您可能会遇到这样的问题:明明我在Page_Load里面给控件的属性赋值了,但是在回发(提交表单)的时候却提示我没有给属性赋值(属性值为空)。这是为什么呢?原因就在于在回发的时候Page_Load被延后执行了。
那么要如何解决这个问题呢?一是在Oninit里面赋值,一是在控件内部把属性值保存在Viewstate里面。而我这采用了后者。Viewstate里面的东东谁然看起来乱七八糟的,但是很容易就可以把它变成能够看懂的信息,那么如果把表名、字段名这些敏感的信息放在Viewstate里面显然是不安全的,所以我就自己写了一个类库,可以把信息保存在隐藏域(当然也可以是Cookie、Session等)里面,然后还可以设置密钥,这样没有密钥的话是不能破解的,除非暴力破解或者瞎蒙。
当然了现在Pager_SQL已经独立出来了,有的时候是不需要保存的,或者您觉得保存在客户端了即使加密也是不安全的,那么您可以选择不保存。
为了能够满足不同的需要,所以设置了这两个属性,一个是选择保存信息的位置(当然可以不保存),另一个就是加密用的密钥。
2、保存了什么信息,又保存在了哪里?
保存的信息就是各个属性的值,保存的位置您可以自由选择,可以选择不保存,可以选择保存在隐藏域(web控件的时候需要),也可以保存在Cookie、Session、Cache等地方。
3、排序字段(TableOrderByColumns)如何设置?
Max分页算法只支持一个排序字段,例如: “ID”、“ID desc”
目前其他的分页算法支持多个排序字段,例如:“col1,col2 desc”、“col1,col2,col3” 、“col1 desc ,col2,col3 desc”等。
4、查询条件(TableQuery)如何设置?
不需要查询条件的话可以设置为空字符串,或者不用赋值。
查询条件就是where后面的SQL语句,例如“title like ‘%分页控件%’”、 “title like ‘%分页控件%’ and kind = 2”等。
也可以是参数化的形式,比如:“kind = @kind”。注意,这里并不会处理储存过程的参数!
也可以是混合形式,比如:“title like ‘%’ + @title + ‘%’ and kind = 3 ”
5、给属性赋值有没有先后顺序?
要先设置排序字段,然后在选择分页算法。各个属性都设置完毕后才能调用CreateSQL(),最后才能调用GetSQLByPageIndex(3)获得SQL语句。
6、多表关联
对于多表关联,我是习惯使用视图来解决的,就是数据库里面的视图。关系型数据库嘛,不可避免的就是多表关联,既然数据库已经为我们提供了视图,那么我们为什么不用呢?
有人回帖说:三五个人一起写视图,很容易乱。这个是理由吗?三五个人一起写代码,不也是可能会乱吗?那我们就不写代码了吗?我们想出来了三层,用分层的方式来解决“乱”的问题。解决了不就可以了吗?为什么要否定呢?
我好像说了一大堆的废话,那么怎么来管理视图呢?
第一:一个视图只用在一个列表页面里,这样就避免了一个视图被多个页面调用,然后有的页面需求变化了就去改视图,然后导致了其他页面的错误。
第二:规范命名。我个人的给视图命名的规则是这样的,
项目标志:区分不同的项目的。
功能标志:List——列表用、Detail——详细页面、Search——综合查询等。
大模块、小模块的标志:比如人员管理等。
表名、功能:比如显示某些表的数据,查询某些表的数据等。
比如:V_ICBC_List_Emp_EmployeeShowData_jyk
看起来有点长,似乎不好记忆。写这么长的视图名当然不是给人记忆的,而是要便于管理的。使用的时候可以复制粘贴呀,也不用一个字母一个字母的敲上去。
当然这是我的做法,仅供参考。