【发布时间】:2011-01-19 23:48:19
【问题描述】:
我有一个使用 ODS(ObjectDataSource) 来获取数据的 Gridview 控件。为了获得最佳性能和效率,我关闭了 Gridview 的视图状态(即 EnableViewstate = "false"。
我还在关联的 Objectdatasource 中启用了缓存。这消除了多达 50-60% 的性能优化,因为它消除了数据库往返.. 由 ODS 缓存提供。
因此,在此之后,我陷入了著名的“ODS 排序”问题,但我设法为它发明了一个棘手的解决方案并且它工作正常:
Optimize Pagination & Sorting with ObjectDataSource having EnableCaching = true
下一个分页,它也可以正常工作。现在,我需要在 Gridview 的顶部显示“总记录:X”。嗯,我部署了如下方法:
protected void ods_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
if(e.ReturnValue != null && e.ReturnValue.GetType() == typeof(int))
base.setTotalLabel(lblTotal, e.ReturnValue);
}
不要混淆 - base.setTotalLabel 是我自己用计数设置标签文本的方法。这也可以正常工作,但问题是 -
只要 ODS 从 它的缓存不会触发 ODS_Selecting 或 ODS_Select 事件。 它们只是“绕过”,因为它 从缓存中获取数据。这是当我 无法刷新总计记录 数一数!
我希望我已经很好地解释了我的问题,这很棘手。我已经准备好为此进行任何技巧或脏编码,因为我想维护 ODS 缓存,并且我不能仅仅因为一些偶然的“错误更新”而回滚更改。
请帮忙!
【问题讨论】:
标签: caching count record objectdatasource