asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分(2)

其实,分页中所涉及到的细节问题是很多的,要想详细叙述并讲清楚这其中的所有问题,光靠本文的只言片语恐怕是远远不够的,这里我只想向大家介绍一种在ASP.NET Ajax方式下进行真分页编程的一种方法。为了比较简单地使用Ajax方式,我在Visual Studio中直接使用了微软提供的ajaxToolkit包里的Ajax控件,这些控件一般来说都还是挺好用的,这里不对这些控件的使用做介绍了。

在写这篇文章之前我也查阅了很多资料,其实大家在开发数据绑定页面时一般都会采用“真分页”的方式来对数据进行分页处理,ASP.NET 3.5中的DataPager控件是一个用于数据分页的不错的控件,有的人把微软提供的数据绑定控件不支持数据“真分页”的缺陷归到它的头上,我认为这是对它的冤枉。DataPager只负责分页操作,它不管数据源的事情,它更重要的工作在于如何处理分页UI以及与用户的交互。那么,数据源怎么处理呢?数据绑定控件如何知道我的数据源被分成了多少页,我当前取的是哪一页的数据呢?

这些问题也一度让我很苦恼,我尝试过使用.NET中的PagedDataSource对象对数据进行分页,但是后来发觉这个对象也是需要一次性将所有的数据读到内存中才支持分页的,说白了,它也是一个“假分页”数据源对象,和DataGrid、GridView没有什么不同。记得从.NET 2.0开始,微软提供了一系列数据源控件(诸如SqlDataSource、XmlDataSource、LinqDataSource等等)来简化对数据绑定控件的数据源指定,其实我觉得这些控件除了简化代码外没有什么大的价值,有的时候还会破坏程序本身的结构,我一向都反对在页面上直接使用这些控件(当然,做一些演示用的程序使用这些控件还是非常便捷的)。不过我在研究Ajax真分页的过程中无意间看到了Visual Studio工具箱中的ObjectDataSource这个控件,起初我只是认为它应该是那些DataSource控件的基控件,后来通过查资料才知道,这个控件是所有的DataSource控件中唯一支持“真分页”操作的控件,它可以通过设定几个简单的属性就达到数据分页的功能,下面我就向大家介绍一下如何使用这个控件。

这个控件的使用很简单,我们只需要配置几个属性就可以了。

SelectMethod:指定用于获取分页数据的方法名。这个方法是一个自定义的.NET方法,你可以写在页面的CodeBehind代码中,将方法的名字给ObjectDataSource控件的SelectMethod即可。ObjectDataSource控件会通过委托的方式自动去执行你所指定的这个方法。

TypeName:使用ObjectDataSource控件的类的全名称(包括名称空间和类名)。这个属性必须指定,ASP.NET会通过反射来加载相应的方法和对象。

DataObjectTypeName:数据源对象的类型全名称。ObjectDataSource控件最大的亮点就在于它完全支持面向对象数据操作。在分层应用程序开发中,数据访问层的代码会将数据库中的表抽象为class对象,将数据库表中的字段抽象为class对象中的属性,DataObjectTypeName属性所指定的就是这个数据库类对象。

EnablePaging:如果你想开启数据分页功能,就需要将这个属性的值设置为True。

MaximumRowsParameterName:这个属性的值是一个参数名(只是一个参数名,而不是每页显示的数据条数),用于指示每页要显示数据的条数,ObjectDataSource控件根据委托在之前SelectMethod属性所指定的方法中传递该参数并执行其中的代码。注意,这个参数的名称必须与SelectMethod属性所指定的方法中的参数名称完全一样。

StartRowIndexParameterName:这个属性也是一个参数名,用于指示每页起始记录的索引。用法与MaximumRowsParameterName相同。

SelectCountMethod:这个属性是一个方法的签名,用来告诉ObjectDataSource控件通过什么方式得知数据源中总记录的条数。ObjectDataSource控件同样通过委托来执行这个方法,所以方法的签名必须与属性的值完全一样。

然后我们在页面上放置一个ListView控件(或者其它任何一个数据绑定控件),将它的DataSourceID属性的值设置为ObjectDataSource的ID,然后添加一个DataPager控件,将PagedControlID属性的值设置为ListView的ID。

tablerelations

     这是我所取的数据源中的三张数据表的结构关系图,其中主表是Shoutout表,Shoutout中的一条记录对应着多个Image,它们通过BaseComment表进行关联。在下面我会给出如果获取Shoutout分页数据的存储过程的代码。

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjjpjw.html