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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

JScriptHelper类

441
来自专栏跟着阿笨一起玩NET

winform如何保持TreeView节点展开和折叠的状态

转载:http://blog.sina.com.cn/s/blog_6abcacf5010138q5.html

1681
来自专栏听雨堂

程序实现下载文件或者打开文件

FileInfo DownloadFile = new FileInfo("c:\\a.doc"); // 下面到就是读取文件,通过数据流的方式下载了。 ...

1925
来自专栏程序你好

C#代码示例:在WinForm中创建并绑定一个DataTable

在我的一篇文章中,我解释了如何在没有数据库的情况下以web形式绑定gridview。这里,我将解释如何在没有数据库的windows窗体中绑定datagrid。

1154
来自专栏汪毅雄的专栏

Android 7.0 中 ContentProvider 实现原理

本文描述了 ContentProvider 发布者和调用者这两在 Framework 层是如何实现的。

7482
来自专栏hbbliyong

WCF发布多个服务

using System; using System.Collections.Generic; using System.Linq; using System....

3705
来自专栏Core Net

C# 处理Word自动生成报告 四、程序处理

5107
来自专栏james大数据架构

asp.net中打印指定控件内容

1.写一个PrintHelper类 using System; using System.Data; using System.Configuration; u...

23510
来自专栏菩提树下的杨过

ModalPopupExtender用法示例

aspx页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs...

2088
来自专栏菩提树下的杨过

db4o 7.4 for .net3.5试用手记

db4o虽然出来很久了,一直没怎么关注,今天随手试了下,对于小型应用还是不错的,至少省去了ORM的麻烦,一切皆对象,一切都变得那么自然。 下载地址:http:/...

2229

扫码关注云+社区