在ASP.NET 2.0中操作数据之二十六:排序自定义分页(3)

<asp:ObjectDataSource runat="server" OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL" SelectMethod="GetProductsPagedAndSorted" EnablePaging="True" SelectCountMethod="TotalNumberOfProducts" SortParameterName="sortExpression"> </asp:ObjectDataSource>

注意:和前面教程说的一样,请确保ObjectDataSource的SelectParameters集合中sortExpression、startRowIndex和maximumRows输入参数。

要让GridView开启排序,请首先检查Sorting多选框是否已经选中。把GridView的AllowSorting属性设置为true以后就能让每列的标题文字呈现为LinkButton。用户点击标题的LinkButton就会引发如下几个步骤:

1.GridView把它的SortExpression 属性的值修改为当前点击的标题所在列的SortExpression的值。

2.ObjectDataSource调用BLL的GetProductsPagedAndSorted方法,把GridView的SortExpression属性的值作为sortExpression参数传入方法(还有正确的startRowIndex、maximumRows输入参数的值)。

3.BLL调用DAL的GetProductsPagedAndSorted方法。

4.DAL执行GetProductsPagedAndSorted存储过程并传入@sortExpression参数(和@startRowIndex、@maximumRows输入参数)。

5.存储过程把正确的记录子集数据返回BLL,BLL返回到ObjectDataSource;数据被绑定到GridView之后渲染成HTML显示给用户。

图7显示了按照UnitPrice正序排列地第一页记录集。

/uploads/allimg/200612/1K53KH9_0.png

图7:按照UnitPrice排列的果

虽然现在我们的程序能正确按照产品名、分类名、位数量和价格进行排序,但是如果我们选择按照供应商名来排序会得到一个运行时异常,如图8。

/uploads/allimg/200612/1K53O5L_0.png

图8:按照供应商名排序会得到一个运行时异常

之所以会引发这个异常时因为GridView的SupplierName BoundField绑定列的SortExpression设置为SupplierName。然而,这列在供应商表中实际叫做CompanyName,SupplierName是我们为这个列起的别名。因为ROW_NUMBER()功能只能使用真实列名,所以,我们需要把BoundField的SortExpression从“SupplierName”修改为“CompanyName”(如图9),图10显示了修改后按照供应商排序的记录。

/uploads/allimg/200612/1K53G120_0.png

图9:把SupplierName BoundField的SortExpression修改为“CompanyName” (译者注:图片可能不对)

/uploads/allimg/200612/1K53X921_0.png

图10:结果现在能按照供应商名排序了

总结

前面教程中我们实现了自定义分页,只能在设计时固定一种排序方式。简单来说要想又自定义分页又提供自定义排序实现不了。在本教程中,我们通过引入@sortExpression来扩展存储过程解决了这个限制。

在创建了存储过程和DAL、BLL中的新方法后,我们就能通过配置ObjectDataSource把GridView当前SortExpression的值传入BLL的SelectMethod中来实现排序和自定义分页。

编程快乐!

关于作者

Scott Mitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用微软Web技术。Scott是个独立的技 术咨询顾问,培训师,作家,最近完成了将由Sams出版社出版的新作,24小时内精通ASP.NET 2.0。他的联系电邮为mitchell@4guysfromrolla.com,也可以通过他的博客与他联系。

您可能感兴趣的文章:

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

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