如何使用GridView和ObjectDataSource进行排序?

Jon*_*hem 15 asp.net gridview objectdatasource

我有一个GridView,ObjectDataSource我希望能够对它进行排序.

分页工作正常,但排序给了我一个例外:

GridView gridView触发了未处理的事件排序.

如何在服务器端启用排序?

(即gridView.EnableSortingAndPagingCallbacks必须保持错误)

Zen*_*sar 19

将gridView.AllowSorting属性设置为true.从这里开始,如果您使用的是实现IBindingList的对象,则网格应该允许您在回发时自动对数据进行排序.但是,由于很可能不是这种情况,您应该采用上面的TheTXI建议并自己处理排序事件.在代码隐藏中连接GridView.Sorting事件,如下所示:

gridView.Sorting += new GridViewSortEventHandler(gridView_Sorting); 
Run Code Online (Sandbox Code Playgroud)

处理gridView_Sorting方法内的排序,它应如下所示:

private void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
     //Sorting logic here
}
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用附加到控件的OnSort ="gridView_Sorting"在页面本身上连接事件.

请记住,由于您将gridView.EnableSortingAndPagingCallbacks设置为false,因此当用户尝试排序时不会立即触发,而是等待回发到服务器.

我希望这有帮助!

编辑:

由于ObjectDataSource似乎是选择的中间人,因此这里是对排序的简要说明.请使用本网页(完整的例子可以发现以下这里的MSDN,接近底部):

<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>
Run Code Online (Sandbox Code Playgroud)

而不是实际使用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))
}
Run Code Online (Sandbox Code Playgroud)


Pet*_*gne 7

我正在使用Linq2Sql和ObjectDataSource,它可以很好地进行分页和排序.

我实现了一个用作ObjectDataSource的Class.它有一个Select和Count方法调用我的业务层,它使用Linq2SQL查询从数据库中检索数据.select方法自动获取第一个项索引,页面大小和排序表达式作为参数.

public List<EntityClass> Select(int startIndex, int pageSize, string sortBy) {}
public int Count() {}
Run Code Online (Sandbox Code Playgroud)

在ASPX中,DataSource配置如下:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"  
     SelectMethod="Select" EnablePaging="true"
     StartRowIndexParameterName="startIndex" 
     MaximumRowsParameterName="pageSize"
     SortParameterName="sortBy" SelectCountMethod="Count" >   
</asp:ObjectDataSource>
Run Code Online (Sandbox Code Playgroud)

Select和Count方法使用Linq查询从数据库中检索数据.我使用Skip(),Take()Orderby()方法.对于OrderBy接受字符串排序表达式,我使用DynamicLinq没有太多代码,数据绑定,分页和排序自动工作.