ObjectDataSource的分页实现

接下来实现数据分页的效果,界面UI控件的页面请参考UI层实现web版

image

EnablePaging:指示Select方法是否支持分页。

SelectCountMethod:需要总行数时执行的方法。

StartRowIndexParameterName:当EnablePaging为true时,此属性表示Select方法的参数,该参数接受要检索的第一行的索引的值。

MaxinumRowsParameterName:当EnablePaging为true时,这表示Select方法的参数,该参数接受检索的行数的值。

怎么使用呢?

1:首先设置EnablePaging=true,运行页面看看什么情况?

image

2:重载GetDepartments方法,且带参数(maximumRows,startRowIndex),这里的参数名其实可以在objectDataSource对应的属性中更改。这里用默认名称。

image

可以正常运行了,现在问题是这两个参数的值是如何设置呢?(当前都是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">

再次运行,看看效果!

image

虽然参数:maximumRows的值不对,但是startRowIndex的设置是对的,而且自动计算出了(很显然与gvDepts的PageSize关联)正确值。

那么第二个参数的设置:gvDepts已经不能指望了,接下来,还有一个SelectCountMethod(:需要总行数时执行的方法--maximumRows就是最大行数的意思),那么从这方面下手看看。编写获得总数的方法:GetDeptsCount,同时设置:odsDepts.SelectCountMethod=GetDeptsCount,接着运行:

image

image

 

 

 

 

 

这下参数maximumRows已经正确,点击gvDepts第三页的情形:

image

可以看到:当指定了SelectCountMethod方法后,maximumRows实质上就是gvDepts的PageSize的值,由于后台数据库没有真正实现取得分页对应数据,

所以每一页显示的数据都相同,现在我们来更改后台,编写存储过程(GetDepartmentsByPage)来实现分页。

image

DAL层的改动:(选中部分为实现分页而增加的方法)

image

 

 

 

image

BLL层对应的变化:

image

接下来,看运行效果:

image

 

 

 

对于sqlserver2000,后台的分页存储过程参考如下:

image

posted @ 2012-01-17 13:33  net小虫  阅读(1325)  评论(2编辑  收藏  举报