手机版

在ASP .NET 2.0中操作数据之四十四:数据列表和中继器数据排序(三)

时间:2021-10-30 来源:互联网 编辑:宝哥软件园 浏览:

第七步: 在自定义分页的中继器里添加排序功能

现在已经完成了自定义分页,我们再来添加排序功能产品BLL。类的获取产品页面和排序方法和GetProductsPaged一样有startRowIndex和最大行数参数,不一样的是它还多了一个排序表达式参数。在使用自定义分页进行排序。文件里使用获取产品页面和排序方法我们需要:

将对象数据源的选择方法属性从GetProductsPaged改为获取产品页面和排序和已排序。为对象数据源的选择参数参数集合增加一个排序表达式参数。创建一个私有的属性用来在回发过程中通过查看状态存储排序表达式。修改对象数据源的选择事件处理程序将对象数据源的排序表达式参数值赋为排序表达式属性(3中创建的)。创建排序界面。

首先修改对象数据源的选择方法属性并添加排序表达式参数。确定排序表达式的类型是字符串。完成这些后对象数据源的声明标记看起来应该和下面差不多:

asp3360 object data source ID=' products data source ' runat=' server ' oldvaluesparametertformatstring=' original _ { 0 } ' Type Name=' products bll ' select method=' get products page and sorted ' on selection=' products data source _ selection ' select parameters as :参数名称=' sort expression ' Type=' String '/asp:参数名称=' startrow index ' Type=' int 32 '/asp33:参数名称=' maximmrows ' Type='然后添加一个排序表达式属性,它的值为查看状态。在没有设任何排序表达式的值时候,使用" ProductName "作为默认值。

私有字符串排序表达式{ get { object o=ViewState['排序表达式'];if (o==null)返回”ProducT name”;否则返回o . ToString();}设置{ ViewState['SortExpression']=值;}}在对象数据源调用获取产品页面和排序方法前,我们需要将排序表达式参数设为排序表达式属性的值。在选择事件处理程序里添加以下代码:

e.InputParameters['排序表达式']=排序表达式;现在只需要完成排序界面就可以了。和我们上一个例子一样,我们使用3个按钮来实现排序功能,允许用户根据产品名称、类别、供应商来排序。

asp:按钮runat=' server ' id=' sortbyProductName ' Text='按产品名称排序/asp3360按钮runat=' server ' id=' sortbycategory Name ' Text='按类别排序/asp3360按钮runat=' server ' id=' SortBySupplierName ' Text='按供应商排序'/为这三个按钮都创建单击事件处理程序。在其中将StartRowIndex设为0,排序表达式设为相应的值,并将数据重新绑定到复读机。

受保护的void SortByProductName_Click(对象发送者,事件参数e){ startrow索引=0;SortExpression=' ProductName '产品. DataBind();}受保护的void SortByCategoryName_Click(对象发送者,事件参数e){ startrownindex=0;SortExpression=' CategoryName '产品. DataBind();}受保护的void SortBySupplierName_Click(对象发送者,EventArgs e){ startrownindex=0;SortExpression=' CompanyName产品. DataBind();}现在所有工作都完成了!实现自定义分页和排序的一些步骤和默认分页差不多。图18显示的当按照种类排序时的最后一页数据。

//files.jb51.net/file_images/article/201605/2016051411324436.png

图18: 按种类排序的最后一页数据

注意:在前面的例子里,当按照供应者排序时排序表达式为供应商名称。然而执行自定义分页时我们需要使用公司名称。这是因为自定义分页的存储过程get products页面和已排序将排序表达式传给行号(),行号()需要一个实际的列名,而不是别名。因此我们必须使用公司名称(供应商表的一个列名),而不是使用供应商名称(选择语句里的别名)作为表情。

总结

DataList和Repeater都没有提供内置的排序支持,但是我们可以通过定制接口和一点点代码来实现这个功能。当只实现排序(没有分页)时,排序表达式可以通过数据源选择参数对象传递给对象数据源的选择方法。在选择对象数据源的事件处理程序时,可以分配数据源选择参数对象的排序表达式属性。

向已经有排序功能的DataList或Repeater添加排序功能是在BLL添加接收排序表达式的方法最简单的方法。然后,可以通过ObjectDataSource的SelectParameters参数传递这些信息。

编程快乐!

作者简介

Scott Mitchell,本系列教程的作者,也是关于ASP/ASP的六本书的作者。NET,是4GuysFromRolla.com的创始人,自1998年以来一直使用微软的网络技术。你可以点击查看所有教程《[翻译]Scott Mitchell 的ASP.NET 2.0数据教程》,希望能帮助你学习ASP.NET。

版权声明:在ASP .NET 2.0中操作数据之四十四:数据列表和中继器数据排序(三)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。