图12:结果根据UnitPrice以正序形式进行排序 研究排序工作方式
所有的GridView字段-BoundField, CheckBoxField, TemplateField等等-都有SortExpression属性指示当标题上的排序链接点击后的排序方式。GridView同样也有一个SortExpression属性。当排序LinkButton被点击后,GridView把它的SortExpression设置为该字段的SortExpression,接着,数据就重新按照GridView的SortExpression属性以一定次序从ObjectDataSource返回。下面列出了用户排序时GridView具体的流程步骤:
1. GridView的Sorting event 触发
2. GridView的SortExpression 属性设置为点击LinkButton所在字段的SortExpression 3. ObjectDataSource重新从BLL中获取所有数据并根据GridView的 SortExpression来排序数据 4. GridView的PageIndex被置0,也就是用户转到了第一页数据(假设分页是开启的) 5. GridView的Sorted 事件触发
和默认分页方式一样,默认排序方式从BLL中获取所有数据进行排序。在未分页或者使用默认方式分页的情况下,我们没有办法改善性能(除了缓存数据)。然而在后续教程中,我们能通过自定义分页来使排序更有效率。
When binding an ObjectDataSource to the GridView through the drop-down list in the GridView’s smart tag, each GridView field automatically has its SortExpression property assigned to the name of the data field in the ProductsRow class. For example, the ProductName BoundField’s SortExpression is set to ProductName, as shown in the following declarative markup: 如果我们通过GridView智能标签的下拉框把ObjectDataSource绑定到GridView的话,GridView的字段就会自动把SortExpression属性设置为相应的ProductsRow类。比如,ProductName BoundField的SortExpression就设置为ProductName,代码如下:
ASP.NET
1 一个字段能通过清除SortExpression(设置为空字符串)属性来禁止排序。想象下如果我们不希望用户根据价格来排序产品,我们就可以通过在代码标签或者在字段对话框(点击GridView智能标签的Edit Columns链接)中移除UnitPrice BoundField的SortExpression属性例子实现。 图13:结果根据UnitPrice以升序进行排序 一旦移除UnitPrice BoundField 的SortExpression属性,标题上就只是文字而不是链接了,防止用户根据价格进行排序。 图14:移除了SortExpression属性,用户就不能再根据产品价格进行排序了 编程排序GridView 我们还可以使用GridView的Sort 方法编程对GridView的内容进行排序。只需要传入SortExpression和SortDirection(Ascending或者Descending)即可。 我们关闭了UnitPrice的排序是考虑到不希望用户只去买最便宜的东西。然而,我们希望鼓励用户去买最贵的产品,所以我们希望能按照价格排序但是仅提供从价格最高到价格最低这么一种排序方式。 要实现这样的需求,我们首先在页面上添加一个Button Web控件,设置它的ID属性为 SortPriceDescending,Text属性为“Sort by Price”。然后在设计器双击按钮控件来创建按钮的Click事件处理器,加入如下代码: C# 1 protected void SortPriceDescending_Click(object sender, EventArgs e) 2 { 3 // 根据UnitPrice降序排列 4 Products.Sort(\ 5 } 点击按钮页面转向第一页并以价格排序,从最贵的到最便宜的(见图15)。 图15:点击按钮让产品从最贵到最便宜进行排序 总结
相关推荐: