У меня есть элемент управления Gridview, использующий ODS (ObjectDataSource) для извлечения данных. Для лучшей производительности и эффективности я отключил состояние просмотра Gridview (т.е. EnableViewstate = "false".
И я также включил кэширование в связанном источнике Objectdatasource. Это устраняет до 50-60% оптимизации производительности, поскольку устраняет необходимость в двустороннем обращении к БД. Предоставлено ODS Caching.
Итак, после этого я застрял в известной проблеме «сортировки ОРВ», но мне удалось изобрести хитрое решение для нее и она работает нормально:
Оптимизация разбивки на страницы и сортировки с ObjectDataSource, имеющим EnableCaching = true
Следующая нумерация страниц также работает нормально. Теперь мне нужно отобразить «Всего записей: X» в верхней части Gridview. Ну, я развернул следующий метод:
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_Selecting или ODS_Select.
Они просто "обойдены", потому что это
берет данные из кеша. Это когда я
не удается обновить итоговые записи
сосчитать!
Надеюсь, я хорошо объяснил свою проблему, это сложно. Я готов сделать любую хитрость или грязное кодирование для этого, потому что я хочу поддерживать ODS-кэширование и не могу откатить изменения только из-за нескольких случайных «неправильных обновлений».
Пожалуйста, помогите!