使用ObjectDataSource和GridView实现分页






3.51/5 (23投票s)
2006 年 5 月 1 日
6分钟阅读

195600

3649
使用 ObjectDataSource 和 GridView 的分页和排序示例演示
引言
在这篇文章中,我探讨了 ASP.NET 2.0 中 ObjectDataSource 控件与 GridView 的一些特性。ObjectDataSource 控件用于将控件绑定到中间层业务对象。我通过一个示例演示了 ObjectDataSource 控件的一些特性,虽然我本可以使用 XMLDataSource 控件轻松实现。我这样做是因为,当您从互联网下载一些连接到数据库的东西时,这种数据库连接有时会给一些人带来问题。因此,为了让事情对您来说更容易,我使用了 ObjectDataSource(在本文的其余部分将称为“ODS”)控件与 XML 文件。
ObjectDataSource::分页
我们可以通过两种方式在应用程序中实现分页
- 使用控件的分页行为(例如 GridView)
- 在数据源级别使用分页。
第一种方法导致控件从数据源加载所有数据,然后根据当前页码和控件的页面大小显示选定的记录。这意味着大量数据必须在网络上传输,这可能会降低应用程序的效率。要实现此功能,我们只需要在 GridView 上设置 EnablePaging 和 PageSize 属性
为了限制在网络上传输的数据量,ASP.NET 2.0 支持在 DataSource 级别进行分页,即我们只发送需要在控件上显示的数据。
ASP.NET 2.0 的美妙之处在于,您可以使用非常少的业务对象修改来编写“零代码”网站。大部分“魔法”都在幕后由 .NET Framework 2.0 完成。一旦您理解了这个“魔法”,您就不需要为此编写那么多代码。所有这些都可以通过简单地设置数据源控件的适当属性来完成。
要在数据源级别启用分页,您需要设置 ODS 的 EnablePaging 属性。有一些属性需要阐明。
- TypeName
- SelectMethodName
- SelectCountMethod
- StartRowIndexParameterName
- MaximumRowsParameterName
ObjectDataSource.TypeName
此属性表示业务对象的完全限定名,该业务对象将返回我们将在控件中显示的数据。它是中间层对象的类名。如果您考虑 default.aspx:App_Code 文件夹中的 ProductsList 类就是我们将用来获取数据的类。
ObjectDataSource.SelectMethodName
此属性表示业务对象的方法名称,该方法将返回我们将在控件中显示的数据。如果您考虑 default.aspx:App_Code 文件夹中 ProductsList 类的 GetProducts() 方法就是我们将用来获取数据的方法。
ObjectDataSource.SelectCountMethodName
此属性表示业务对象的方法名称,该方法将返回我们将在控件中显示的数据的总行数。如果您考虑 default.aspx:App_Code 文件夹中 ProductsList 类的 GetRowCount() 方法就是我们将用来获取数据行数的方法。
ObjectDataSource.StartRowIndexParameterName
此属性表示参数的名称,该参数表示我们将在页面上显示的数据子集的第一行。
ObjectDataSource.MaximumRowsParameterName
此属性表示参数的名称,该参数表示我们将在页面上显示的最大行数。
还有一个名为“SelectParameters”的属性,它表示我们将传递给 ODS 的“SelectMethodName”属性中指定的方法的参数。这些参数值可以从表单控件值到 cookie 值等任何地方获取。
参数传递
如何将参数传递给选择方法?如果设置了 ODS 的 EnablePaging 属性,则 ObjectDataSource.StartRowIndexParameterName 和 ObjectDataSource.MaximumRowsParameterName 属性中指定的参数将以相同的顺序传递给选择方法。因此,您的 SelectMethod 的签名必须包含这两个参数名称。例如
ProductsList.GetProducts(int StartRow,int PageSize)
如果您想在 Select 方法中传递任何其他参数,请将其添加到 ODS 的 SelectParameters 属性中。此参数将在上面提到的两个参数之前传递。
您可以看到 ProductsList.GetProducts() 方法的签名,它包含两个参数,其名称在 ODS.StartRowIndexParameterName 和 ODS.MaximumRowsParameterName 属性中指定。现在,如果您希望传递任何用于您自己的业务逻辑的附加参数,请将其添加到 ODS.SelectParamters 属性中,并如下修改 ProductsList.GetProducts() 的签名
DataTable GetProducts(MyNewParameter,StartRow,PageSize)
MyNewParameter 是添加到 ODS.SelectParameters 属性中的参数。
另一个有趣的事实是,您不需要手动传递 StartRow 和 PageSize 参数的值。.NET 框架会自动将值传递给这些参数,使得 StartRow 参数将包含当前页面的起始行索引,PageSize 将传递 GridView.PageSize 属性的值。(注意:第二个参数不一定要命名为 PageSize。它可以是任何其他参数名称,并且值仍将由 .NET 框架正确传递)。
由于我们只返回当前页面上需要显示的行,GridView 如何知道数据源中的总行数呢?答案是使用 ODS.SelectCountMethod 属性中指定的方法。此方法不带参数并返回整数。
此方法应返回数据源中的总行数,以便 GridView 可以适当地设置其分页器。例如,如果表中有 20 行,并且 GridView 的 PageSize 设置为 10,并且 ODs.SelectCountMethod 中指定的方法返回 10,则 GridView 将不会显示分页指示器,因为它只会看到等于其 PageSize 的 10 行。
ObjectDataSource 事件
ODS 有两个在此上下文中很重要的事件。ODS 的 Selecting 事件在它从业务对象获取数据之前触发,ODS.Selected 事件在数据被获取之后触发。
每次检索数据时,selecting 事件都会触发两次。一次用于数据获取,一次用于获取行数。您可以通过检查 e.ExecutingSelectCount 属性来验证这一点。如果正在检索行数,则返回 true,否则返回 false。
因此,对于每次数据获取,实际上有两次到业务对象的行程,一次用于获取数据,另一次用于获取行计数。SelectMethod 将执行一次,SelectRowCountMethod 将执行另一次。
ObjectDataSource::排序
GridView 会自动为您排序数据。无需采取任何特殊步骤。只需将 GridView 的 AllowSorting 属性设置为 true 即可。
ODS 有一个名为 Sorting 的事件,它在排序发生之前触发。
以下是使用 ODS 和 GridView 设置页面以进行分页和排序所需的步骤。
- 添加 GridView
- 添加 ODS
- 添加将返回数据的类
- 将 ODS.SelectMethod 名称设置为返回数据的方法的名称
- 将 ODS.SelectCountMethod 设置为返回行数的方法的名称
- 设置 ODS.StartRowIndexParameterName 和 ODS.MaximumRowsParameterName
- 修改选择方法的签名以包含上述两个参数。
- 实现 SelectMethod 和 SelectCountMethod
- 将 GridView.DataSourceID 设置为 ODS 的 ID。
- 在浏览器中运行页面
我将提供更多关于 ObjectDataSource 的内容。所以保持警惕……