<pg:SqlPager (注:对Oracle分页时使用OraclePager;pg为自定义标记,可自行命名,DataGrid1为要分页的绑定控件,这是dataGrid)
id="SqlPager1"
runat="server"
ControlToPaginate="DataGrid1"
ConnectionString="SERVER=localhost;DATABASE=northwind;uid=sa;password=;"
SelectCommand="SELECT customerid, companyname FROM customers"
PagerStyle="NextPrev"
PagingMode="NonCached">
</pg:SqlPager>
(以上各属性也可写在在后台代码中)
后台代码:
SqlPager1.CurrentPageIndex = 0;
SqlPager1.DataBind();
如要对标题排序,在commandSort代码中:
SqlPager1.SortField=e.SortExpression;
SqlPager1.DataBind();
注意事项:
1、使用Cached方式时,因数据进行了缓存,如果对数据进行了修改、重新排序,需先ClearCache()清除缓存,再进行数据绑定,否则要等缓存过期才能看到效果。
2、SqlPager中使用NonCached方式时,如果要对有重复数据的标题列进行排序,可能分页结果会不准确。在oracle中因排序时重新生成了rownum列,不会有这种问题。如果有唯一值的列,可在sortField中增加此列。对此问题还没想到更好的办法,如果哪位有好方法可以一起探讨。
上述问题2的原因:排序的分页是通过对排序字段分别按asc、desc排序后再取top n实现的,但对重复值asc及desc对排序结果无影响,以northwind为例:select orderid,employeeid from orders where employeeid=1 order by employeeid ASC和select orderid,employeeid from orders where employeeid=1 order by employeeid DESC结果是一样的,对于复杂查询,列不确定,结果集中可能无主键,无法使用表变量及临时表,暂未想到更好的办法处理,欢迎大家讨论