在ASP.NET 2.0中操作数据之四十四:DataList和Repeater数据排序(三)
作者:heker2007 发布时间:2023-07-02 04:45:57
第七步: 在自定义分页的Repeater 里添加排序功能
现在已经完成了自定义分页,我们再来添加排序功能。ProductsBLL类的GetProductsPagedAndSorted方法和GetProductsPaged一样有startRowIndex 和 maximumRows 参数,不一样的是它还多了一个sortExpression 参数。在SortingWithCustomPaging.aspx里使用GetProductsPagedAndSorted方法我们需要:
将ObjectDataSource的SelectMethod属性从GetProductsPaged改为GetProductsPagedAndSorted。
为ObjectDataSource的SelectParameters参数集合增加一个sortExpression Parameter。
创建一个私有的属性用来在postback过程中通过view state存储SortExpression。
修改ObjectDataSource的Selecting event handler将ObjectDataSource的sortExpression 参数值赋为SortExpression 属性(3中创建的)。
创建排序界面。
首先修改ObjectDataSource的SelectMethod属性并添加sortExpression 参数。确定sortExpression 的类型是String。完成这些后ObjectDataSource的声明标记看起来应该和下面差不多:
<asp:ObjectDataSource ID="ProductsDataSource" runat="server"
OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL"
SelectMethod="GetProductsPagedAndSorted"
OnSelecting="ProductsDataSource_Selecting">
<SelectParameters>
<asp:Parameter Name="sortExpression" Type="String" />
<asp:Parameter Name="startRowIndex" Type="Int32" />
<asp:Parameter Name="maximumRows" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
然后添加一个SortExpression属性,它的值为view state。在没有设任何sort expression的值时候,使用“ProductName”作为默认值。
private string SortExpression
{
get
{
object o = ViewState["SortExpression"];
if (o == null)
return "ProductName";
else
return o.ToString();
}
set
{
ViewState["SortExpression"] = value;
}
}
在ObjectDataSource调用GetProductsPagedAndSorted方法前,我们需要将sortExpression 参数设为SortExpression属性的值。在Selecting event handler里添加以下代码:
e.InputParameters["sortExpression"] = SortExpression;
现在只需要完成排序界面就可以了。和我们上一个例子一样,我们使用3个button来实现排序功能,允许用户根据product name, category, supplier来排序。
<asp:Button runat="server" id="SortByProductName"
Text="Sort by Product Name" />
<asp:Button runat="server" id="SortByCategoryName"
Text="Sort by Category" />
<asp:Button runat="server" id="SortBySupplierName"
Text="Sort by Supplier" />
为这三个button都创建Click event handler。在其中将StartRowIndex设为0,SortExpression设为相应的值,并将数据重新绑定到Repeater。
protected void SortByProductName_Click(object sender, EventArgs e)
{
StartRowIndex = 0;
SortExpression = "ProductName";
Products.DataBind();
}
protected void SortByCategoryName_Click(object sender, EventArgs e)
{
StartRowIndex = 0;
SortExpression = "CategoryName";
Products.DataBind();
}
protected void SortBySupplierName_Click(object sender, EventArgs e)
{
StartRowIndex = 0;
SortExpression = "CompanyName";
Products.DataBind();
}
现在所有工作都完成了!实现自定义分页和排序的一些步骤和默认分页差不多。图18显示的当按照category排序时的最后一页数据。
图 18: 按Category排序的最后一页数据
注意:在前面的例子里,当按照supplier排序时排序表达式为” SupplierName”。然而执行自定义分页时我们需要使用” CompanyName”。这是因为自定义分页的存储过程–GetProductsPagedAndSorted–将sort expression传给ROW_NUMBER(),ROW_NUMBER()需要一个实际的列名,而不是别名。因此我们必须使用CompanyName(Suppliers表的一个列名),而不是使用SupplierName (SELECT语句里的别名)作为expression。
总结
无论是DataList还是Repeater都没有提供内置的排序支持,但是通过自定义界面和一点点代码,我们可以实现这样的功能。当仅仅只实现排序时(不包含分页),sort expression可以通过DataSourceSelectArguments对象传给ObjectDataSource的Select方法。DataSourceSelectArguments对象的SortExpression属性可以在ObjectDataSource的electing event handler里赋值。
为已经有排序功能的DataList或Repeater添加排序功能,最简单的方法是在BLL里添加一个接收sort expression的方法。然后这个信息可以通过ObjectDataSource的SelectParameters参数传进去。
祝编程快乐!
作者简介
本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用 微软Web技术。大家可以查看全部教程《[翻译]Scott Mitchell 的ASP.NET 2.0数据教程》,希望对大家的学习ASP.NET有所帮助。


猜你喜欢
- 这一篇笔记将介绍 session 相关的内容,包括如何在系统中使用 session,以及利用 session 实现登录认证的功能。1、ses
- 前言:在最近做多智能车的控制时,绘制障碍物的时候发现障碍物的图层被路面图层所覆盖,一时不知道怎么解决,其实在用matplotlib.pypl
- 这些天,我需要全文搜索。这个区块中最酷的孩子们是Elastic Search和Sorl:他们快速,灵活,资源消耗沉重并且需要Java,这几乎
- 目录一、任务二、实现(1)导库并创建画布(2)画图形(3)创建按钮和文本框(4)功能实现三、完整代码四、升级—绑定键盘事件总结一、任务用多个
- Python中的数据类型共有六个,分别是:字符串,数字,布尔类型,列表,元祖,字典,集合其中分为可变的类型和不可变的:可变类型:列表,字典,
- 之前在使用Pandas处理csv文件时,发现如果文件名为中文,则会报错:OSError: Initializing from file fa
- 问题描述 windows错误安装方法:pip3 install numpy这种情况下虽然安装成功,但是在import numpy时会出现如下
- 本文来源于Element官方文档:http://element-cn.eleme.io/#/zh-CN/component/carousel
- Linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译
- 本文实例讲述了JavaScript函数参数使用带参数名的方式赋值传入的方法。分享给大家供大家参考。具体分析如下:这里其实就是在给函数传递参数
- 一、使用的工具haystack是django的开源搜索框架,该框架支持Solr,Elasticsearch,Whoosh,*Xapian*搜
- 发布Python包上一篇介绍了如何使用别人的轮子,现在我们讨论下如何自己造轮子给别人用。作为一个流行的开源开发项目,Python拥有一个活跃
- 二分查找法(Binary Search)是一种在有序数组中查找某一特定元素的算法,它的思想是将数组从中间分成两部分,判断目标元素在哪一部分中
- 通过使用turtle绘画象棋棋盘,供大家参考,具体内容如下# 绘制象棋棋盘import turtlet = turtle.Pen()t.wi
- 前提条件1.了解Python语言,并会安装第三方库2.了解Python Web Flask框架3.了解PyTorch深度学习框架实验环境Py
- Python生成指定数量的优惠码打开Python开发工具IDLE,新建‘codeGen.py'文件,并保存导入需要的包,这里需要ra
- 淘宝的投诉类型里有这么一条“收款不发货”。帮助中心里是这么解释的:买、卖双方在淘宝上成交后,当卖家在收到买家汇款后没有按时履行发货义务,或买
- 方法一:巧用sum函数将list列表与一个空列表相加,就能把嵌套列表合并成一个a=[[1],[2],[3],[4],[5]]merge=su
- 1、安装scikit-learn1.1Scikit-learn 依赖Python (>= 2.6 or >= 3.3),NumP
- 本文实例为大家分享了Python端口扫描的实现代码,供大家参考,具体内容如下获取本机的IP和端口号:import socket def ge