我有一个 GridView,它使用存储过程进行自定义分页和排序。
没问题,工作正常(分页和排序),但问题是当我在 ObjectDataSource 中启用缓存时,例如:
EnableCaching="True"
它正确地缓存了用户访问的每个页面,但是在这种情况下,当用户想要对其进行排序时会引发错误(虽然如果 EnableCaching ="False" 则效果很好:
The data source 'ObjectDataSource1' does not support sorting with IEnumerable data. Automatic sorting is only supported with DataView, DataTable, and DataSet.
当我启用缓存时,我应该做什么才能进行排序。
谢谢你。
如果我们启用了缓存,那么当执行 select 方法时,会在触发 Selecting 事件之前访问缓存,并且如果我们正在搜索的数据在缓存中, select 方法返回缓存的数据。
因此,如果我们在 Selecting 事件中对输入参数进行任何预处理(例如:排序),则缓存不起作用,因为创建的缓存键仅取决于选择参数(及其值)和分页值(当缓存工作时)与分页)。另请记住,如果我们有排序参数,缓存将不起作用。
这篇文章怎么样 -
我从以下两个网址得到了线索:
http://www.codeproject.com/KB/aspnet/GridViewObjectDataSource.aspx http://forums.asp.net/t/1344883.aspx
在这两个示例中,他们都实现了一个通用排序例程,用于处理 ODS(对象数据源)的排序,这样我们就可以设置 ODS 缓存属性:
EnableCaching="True"
有专家意见吗?
PS:为了提高性能,我在 ODS 以及使用该 ODS 的 GridView 中禁用了 Viewstate,并在 ODS 中启用了缓存。