zoukankan      html  css  js  c++  java
  • GridView实战二:使用ObjectDataSource数据源控件(自定义缓存机制实现Sort)

      参考资料:http://www.cnblogs.com/fsjohnhuang/archive/2011/12/17/2291200.html

     因为使用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 }



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

    如果您觉得本文的内容有趣就扫一下吧!捐赠互勉!
      

  • 相关阅读:
    如何在博客园中添加新随笔以及随笔参考格式
    如何在班级博客中提交作业
    C高级第一次作业
    MySQL调优
    个人作业--软件工程实践总结
    动态分区最佳-最坏-最先分配
    动态分区代码
    个人作业-软件评测
    软件工程第五次作业
    软件工程第四次作业——结对作业
  • 原文地址:https://www.cnblogs.com/fsjohnhuang/p/2292947.html
Copyright © 2011-2022 走看看