在ASP.NET 2.0中操作数据之四十四:DataList和Repeat

网络编程 2025-04-04 17:28www.168986.cn编程入门

第七步:为自定义分页添加排序功能

在完成自定义分页之后,接下来我们将进一步完善排序功能。我们的ProductsBLL类提供了一个强大的方法——GetProductsPagedAndSorted。与GetProductsPaged方法相似,它同样接受startRowIndex和maximumRows参数,但除此之外,还有一个重要的sortExpression参数。要在SortingWithCustomPaging.aspx页面实现排序功能,我们需要进行以下步骤:

将ObjectDataSource的SelectMethod属性从GetProductsPaged更改为GetProductsPagedAndSorted,以支持新的排序功能。

接着,为ObjectDataSource的SelectParameters参数集合增加一个sortExpression参数。这个参数将用于指定排序的字段。

然后,创建一个私有的SortExpression属性,用于在postback过程中通过view state存储排序表达式。在没有设定任何sort expression的值时,默认值为“ProductName”。

接下来,修改ObjectDataSource的Selecting event handler,将ObjectDataSource的sortExpression参数值设定为SortExpression属性的值。这样,每次调用GetProductsPagedAndSorted方法时,都会按照我们设定的排序表达式进行排序。

创建排序界面。类似于之前的例子,我们将使用3个按钮来实现排序功能,允许用户根据产品名称(ProductName)、类别(Category)和供应商(Supplier)来排序。

```aspx

OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"

SelectMethod="GetProductsPagedAndSorted"

OnSelecting="ProductsDataSource_Selecting">

```

再来看SortExpression属性的创建:

```csharp

private string SortExpression

{

get

{

object o = ViewState["SortExpression"];

return o == null ? "ProductName" : o.ToString();

}

set

{

ViewState["SortExpression"] = value;

}

}

```

在ObjectDataSource调用GetProductsPagedAndSorted方法之前,在Selecting event handler中添加如下代码来设定sortExpression参数:

```csharp

e.InputParameters["sortExpression"] = SortExpression;

```

至此,排序功能的框架已经搭建完毕。现在只需完善排序界面的相关逻辑和按钮的响应事件,即可实现根据产品名称、类别和供应商进行灵活的排序操作。旅程:ASP.NET中的排序与分页功能实现

在ASP.NET Web Forms应用程序中,我们经常会遇到需要对数据进行排序和分页的需求。本文将介绍如何通过简单的ASP控件和代码实现这一功能。

让我们在界面上放置三个按钮,分别用于按产品名称、类别和供应商名称进行排序。这些按钮可以通过ASP.NET的服务器控件实现。例如:

```html

```

接下来,为每个按钮创建Click事件处理程序。在这些程序中,我们将设置StartRowIndex为0(因为我们每次点击按钮都需要重新加载数据),并设置SortExpression为相应的值,然后重新绑定数据到Repeater控件。代码示例如下:

```csharp

protected void SortByProductName_Click(object sender, EventArgs e)

{

StartRowIndex = 0;

SortExpression = "ProductName";

Products.DataBind(); //假设Products是你的数据源控件名称

}

// 对于SortByCategoryName和SortBySupplierName按钮同样处理

```

我们在进行自定义分页和排序时需要注意一些细节。例如,在图18中展示的是按照类别排序的一页数据。在实现自定义分页时,我们需要使用实际的列名(如CompanyName),而不是别名(如SupplierName)。这是因为我们的存储过程需要一个实际的列名作为sort expression传递给ROW_NUMBER()函数。ROW_NUMBER()函数是SQL Server中的一个函数,用于生成一个行号,根据这个行号我们可以实现分页功能。我们必须使用真实的列名作为expression。

无论是DataList还是Repeater都没有提供内置的排序支持。但是通过自定义界面和代码,我们可以实现这样的功能。我们可以在业务逻辑层(BLL)中添加一个接收sort expression的方法,然后在ObjectDataSource的Select方法中通过DataSourceSelectArguments对象传递这个信息。这样我们就可以在DataList或Repeater中实现排序功能了。这个过程并不复杂,只需要一些基本的编程知识和耐心。记住,编程的乐趣在于解决问题和创造新的东西。祝编程快乐!本文作者Scott Mitchell是ASP和ASP.NET领域的专家,他的作品深受读者喜爱。希望他的教程能对大家学习ASP.NET有所帮助。如果想要了解更多关于ASP.NET的知识,可以查看他的全部教程。如有任何疑问或建议,欢迎交流讨论。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by