因为使用ObjectDataSource自带的缓存机制无法实现排序功能,苦苦寻觅终于找到了解决方案。参考后觉得还是自己实操一下比较安心,下面是对《GridView实战二:使用ObjectDataSource数据源控件》的改进!!

  CL代码:

1 public class CL
2 {
3     private OdsDataManager om = new OdsDataManager();
4     private static string[] mainKey = {"ods"};
5
6     public CL()
7     {
8     }
9
10     public DataTable GetRecord(int maximumRows, int startRowIndex, string sortExpression)
11     {
12         DataTable dt = HttpRuntime.Cache[GetCacheKey(Convert.ToString(maximumRows) + startRowIndex)] as DataTable;
13         if (dt == null)
14         {
15             dt = om.GetRecord(maximumRows, startRowIndex, sortExpression);
16             AddCache(Convert.ToString(maximumRows) + startRowIndex, dt);
17         }
18         if (!string.IsNullOrEmpty(sortExpression))
19         {
20             DataTable tempDt = dt.Clone();
21             DataRow[] drs = dt.Select("",sortExpression);
22             foreach (DataRow dr in drs)
23             {
24                 tempDt.Rows.Add(dr.ItemArray);
25             }
26             dt = tempDt;
27         }
28
29         return dt;
30     }
31
32     public int GetRecordCount()
33     {
34         return om.GetRecordCount();
35     }
36
37     public bool UpdateRecord(int ID, string Name, string Sex, string Country, string Hobby)
38     {
39         RemoveCache();
40         return om.UpdateRecord(ID,Name,Sex,Country,Hobby);
41     }
42
43     public bool DelRecord(int ID)
44     {
45         RemoveCache();
46         return om.DelRecord(ID);
47     }
48
49     public DataTable GetCountry()
50     {
51         DataTable countryDt = HttpRuntime.Cache["countryDt"] as DataTable;
52         return countryDt;
53     }
54
55     public DataTable GetHobby()
56     {
57         DataTable hobbyDt = HttpRuntime.Cache["hobbyDt"] as DataTable;
58         return hobbyDt;
59     }
60
61     private void AddCache(string key, object data)
62     {
63         System.Web.Caching.Cache dc = HttpRuntime.Cache;
64         if (dc[mainKey[0]] == null)
65             dc.Insert(mainKey[0], DateTime.Now);
66
67         System.Web.Caching.CacheDependency cd = new System.Web.Caching.CacheDependency(null, mainKey);
68         dc.Insert(GetCacheKey(key), data, cd, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);
69     }
70
71     private void RemoveCache()
72     {
73         System.Web.Caching.Cache dc = HttpRuntime.Cache;
74         if (dc[mainKey[0]] != null)
75             dc[mainKey[0]] = DateTime.Now;
76     }
77
78     private string GetCacheKey(string key)
79     {
80         return mainKey[0] + "-" + key;
81     }
82 }



实现预加载(proactive loading)

Global.asax

1     void Application_Start(object sender, EventArgs e)
2     {
3         // 在应用程序启动时运行的代码
4         OdsDataManager om = new OdsDataManager();
5         HttpRuntime.Cache.Insert("countryDt", om.GetCountry(), null,
6             System.Web.Caching.Cache.NoAbsoluteExpiration,
7             System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
8         HttpRuntime.Cache.Insert("hobbyDt", om.GetHobby(), null,
9             System.Web.Caching.Cache.NoAbsoluteExpiration,
10             System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
11         om = null;
12     }





欢迎添加我的公众号一起深入探讨技术手艺人的那些事!

GridView实战二:使用ObjectDataSource数据源控件(自定义缓存机制实现Sort)_解决方案