I needed to bind a large dataset to a gridview, it also contained numerous calculations that slowed down the database call, so I wanted to implement caching for the gridview I was using.
So I used the default Caching on the ObjectDataSource. Which works great and well except for when you want to programatically refresh the data (say a new filter to be added). Turns out you can actually do it.
First make sure that in Page Load you set the CacheKeyDependency if it isn't set (you can also manually set it on the aspx page as a property of the ObjectDataSource):
if (!IsPostBack)
{
//Create CacheKeyDependency if it doesn'tnot exists
if (Cache[ObjectDataSource1.CacheKeyDependency] == null)
{
Cache[ObjectDataSource1.CacheKeyDependency] = new object();
}
}
In your code whenever you want the Select() of your ObjectDataSource to fire or just rebind from the database make this call:
Cache[ObjectDataSource1.CacheKeyDependency] = new object();
This allows you to programatically renew/refresh your datasource at will while still retaining the Cache abilities for paging/sorting/grouping etc.