@H_404_1@我有一个GridView与ObjectDataSource,我想要能够排序.
分页工作正常,但排序给我一个例外:
“GridView’gridView’被触发事件排序未被处理.
如何在服务器端启用排序?
(即gridView.EnableSortingAndPagingCallbacks必须保持“false”)
解决方法
将gridView.AllowSorting属性设置为true.从这里,如果您使用实现IBindingList的对象,则网格应允许您在回发后自动对数据进行排序.但是,由于最有可能不是这样,您应该在上面提到TheTXI的建议,并自己处理排序事件.在Codebehind中连接GridView.Sorting事件,就像这样:
gridView.Sorting += new GridViewSortEventHandler(gridView_Sorting);
处理gridView_Sorting方法中的排序,应该如下所示:
private void gridView_Sorting(object sender,GridViewSortEventArgs e) { //Sorting logic here }
此外,您可以使用连接到控件的OnSort =“gridView_Sorting”将页面上的事件连接起来.
记住,由于您将gridView.EnableSortingAndPagingCallbacks设置为false,所以在用户尝试排序时不会立即触发,而是等待服务器的回发.
我希望这有帮助!
编辑:
由于ObjectDataSource似乎是选择的中间人,下面简要介绍了排序的布线.在您的页面中使用以下内容(完整示例可以在MSDN上找到here,靠近底部):
<asp:GridView ID="TestGridView" runat="server" DataSourceID="ObjectDataSourceTest" AllowSorting="True"> </asp:GridView> <asp:ObjectDataSource ID="ObjectDataSourceTest" runat="server" SelectMethod="SelectMethod" TypeName="Samples.AspNet.CS.SortingData" SortParameterName="sortExpression"> </asp:ObjectDataSource>
而不是实际使用gridView.Sorting事件,您将跳过ObjectDataSource来处理排序.一旦排序被触发,它应该在您的代码后面调用SelectMethod中找到的方法.然后,在SelectMethod里面,你可以处理GridView对象的重建,看起来像:
public void SelectMethod(string sortExpression) { //Rebuild gridView table if necessary,same method used in //on a postback,and retrieve data from the database. Once //completed sort the data with: gridView.Sort(sortExpression,SortDirection.(Ascending or Descending)) }