考察DataGrid控件: Part 4 (下)
|
在上半部分我们考察了前2步:将DataGrid控件的AllowSorting属性设置为True,并创建一个排序事件处理器.在本节我们看如何获取按指定排序的数据. 构建一个函数获取数据并排序 最理想的情况是我们构建某个函数,该函数根据传入的排序表达式(sort expression)来对记录排序.然后要么直接将这些数据绑定到DataGrid;要么返回一个DataReader对象,再将DataReader对象绑定到DataGrid.假定我们已经创建了这样的一个函数,我们叫它BindData,它接受一个排序表达式作为输入参数,返回排好序的数据并绑定到DataGrid。在排序事件处理器里包含该函数,如下: Sub SortData(sender as Object, e as DataGridSortCommandEventArgs) 现在的问题是创建该函数!该函数的主体代码取决于我们使用的数据源以及如何排序.在本前面的示例里我们使用存储过程来获取最常见的10个FAQs.但在这里我不想修改该存储过程,而使用SQL语句,因此,BindData函数看起来应该像下面这样: Sub BindData(sortExpr as String) 注意,在SQL查询的ORDER BY 子句我们用到了sortExp变量.这是因为表tblFAQ和表 tblFAQCategory有很多相同列名的列,当指定排序依据时我们必须根据别名或说明来排序,比如使用F.ViewCount DESC,这意味着BoundColumns里的SortExpressions相应地改成这个样子: <asp:DataGrid runat="server" id="dgPopularFAQs" 最后,当页面首次登录时我们需要基于某个默认值来排序,在此我选择依ViewCount的降序来排. 在Page_Load事件处理器里我们需要调用BindData("F.ViewCount DESC")方法,当然仅限于首次登录。我们应该认识到,当用户在页面里选择某个特定的列来排序时(这将产生页面回传),我们就不应在Page_Load事件处理器里绑定数据了. 完整的代码和演示页面见http://aspnet.4guysfromrolla.com/demos/dgExample11.aspx 另外,关于使用存储过程来排序的情况请参阅文章《Dynamic ORDER BY Statements in Stored Procedures》(http://www.4guysfromrolla.com/webtech/010704-1.shtml) 结语: 对DataGrid的内容进行排序是很简单的,包含3个步骤:设置AllowSorting属性;创建一个排序事件处理器;创建一个方法来对数据动态的排序. 祝编程快乐 本文作者:未知 源代码网供稿. |
