ObjectDataSource的分页实现
接下来实现数据分页的效果,界面UI控件的页面请参考UI层实现web版。
EnablePaging:指示Select方法是否支持分页。
SelectCountMethod:需要总行数时执行的方法。
StartRowIndexParameterName:当EnablePaging为true时,此属性表示Select方法的参数,该参数接受要检索的第一行的索引的值。
MaxinumRowsParameterName:当EnablePaging为true时,这表示Select方法的参数,该参数接受检索的行数的值。
怎么使用呢?
1:首先设置EnablePaging=true,运行页面看看什么情况?
2:重载GetDepartments方法,且带参数(maximumRows,startRowIndex),这里的参数名其实可以在objectDataSource对应的属性中更改。这里用默认名称。
可以正常运行了,现在问题是这两个参数的值是如何设置呢?(当前都是0,如果需要分页显示,一页显示3条。如果显示第一页:第一个参数是0,第二个参数就是3)
由于GridView控件gvDepts需要分页显示,我们先设置它的属性。
<asp:GridView ID="gvDepts" runat="server" DataSourceID="odsDepts"
EnableModelValidation="True" DataKeyNames="Id" AutoGenerateColumns="False"
onselectedindexchanged="gvDepts_SelectedIndexChanged" Width="500px"
EmptyDataText="没有部门信息" AllowPaging="True" PageSize="3">
再次运行,看看效果!
虽然参数:maximumRows的值不对,但是startRowIndex的设置是对的,而且自动计算出了(很显然与gvDepts的PageSize关联)正确值。
那么第二个参数的设置:gvDepts已经不能指望了,接下来,还有一个SelectCountMethod(:需要总行数时执行的方法--maximumRows就是最大行数的意思),那么从这方面下手看看。编写获得总数的方法:GetDeptsCount,同时设置:odsDepts.SelectCountMethod=GetDeptsCount,接着运行:
这下参数maximumRows已经正确,点击gvDepts第三页的情形:
可以看到:当指定了SelectCountMethod方法后,maximumRows实质上就是gvDepts的PageSize的值,由于后台数据库没有真正实现取得分页对应数据,
所以每一页显示的数据都相同,现在我们来更改后台,编写存储过程(GetDepartmentsByPage)来实现分页。
DAL层的改动:(选中部分为实现分页而增加的方法)
BLL层对应的变化:
接下来,看运行效果:
对于sqlserver2000,后台的分页存储过程参考如下:
当来之世,经道灭尽,我以慈悲哀愍,特留此经止住百岁。其有众生,值斯经者,随意所愿,皆可得度。(南无阿弥陀佛)
道可道,非常道;名可名,非常名。
我常说,一个国家,一个民族,亡国都不怕,最可怕的是一个国 家和民族自己的根本文化亡掉了,这就会沦为万劫不复,永远不会翻身。---南怀瑾<国学大师>