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:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" />
一个字段能通过清除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事件处理器,加入如下代码:
protected void SortPriceDescending_Click(object sender, EventArgs e) { // Sort by UnitPrice in descending order Products.Sort("UnitPrice", SortDirection.Descending); }
点击按钮页面转向第一页并以价格排序,从最贵的到最便宜的(见图15)。
图15:点击按钮让产品从最贵到最便宜进行排序
总结
在这个教程中我们已经说了如何实现默认分页和排序,仅仅需要选择一个复选框来实现!当用户排序或者切换页面的时候都会有类似的工作方式:
1.页面回发
2.数据Web控件pre-level的事件触发(PageIndexChanging 或者 Sorting)
3.所有信息从ObjectDataSource重新获取
4.数据Web控件post -level的事件触发(PageIndexChanged或者 Sorted)
我们实现了报表的基本分页和排序,但是要取得更好的性能我们还需要创建自定义的分页来或者进一步改善分页和排序界面。后面的教程会继续讨论相关主题。
编程愉快!
关于作者
Scott Mitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用微软Web技术。Scott是个独立的技 术咨询顾问,培训师,作家,最近完成了将由Sams出版社出版的新作,24小时内精通ASP.NET 2.0。他的联系电邮为mitchell@4guysfromrolla.com,也可以通过他的博客与他联系。
您可能感兴趣的文章: