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

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

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

  CL代码:

public class CL
{
    private OdsDataManager om = new OdsDataManager();
    private static string[] mainKey = {"ods"};

    public CL()
    {
    }

    public DataTable GetRecord(int maximumRows, int startRowIndex, string sortExpression)
    {
        DataTable dt = HttpRuntime.Cache[GetCacheKey(Convert.ToString(maximumRows) + startRowIndex)] as DataTable;
        if (dt == null)
        {
            dt = om.GetRecord(maximumRows, startRowIndex, sortExpression);
            AddCache(Convert.ToString(maximumRows) + startRowIndex, dt);
        }
        if (!string.IsNullOrEmpty(sortExpression))
        {
            DataTable tempDt = dt.Clone();
            DataRow[] drs = dt.Select("",sortExpression);
            foreach (DataRow dr in drs)
            {
                tempDt.Rows.Add(dr.ItemArray);
            }
            dt = tempDt;
        }

        return dt;
    }

    public int GetRecordCount()
    {
        return om.GetRecordCount();
    }

    public bool UpdateRecord(int ID, string Name, string Sex, string Country, string Hobby)
    {
        RemoveCache();
        return om.UpdateRecord(ID,Name,Sex,Country,Hobby);
    }

    public bool DelRecord(int ID)
    {
        RemoveCache();
        return om.DelRecord(ID);
    }

    public DataTable GetCountry()
    {
        DataTable countryDt = HttpRuntime.Cache["countryDt"] as DataTable;
        return countryDt;
    }

    public DataTable GetHobby()
    {
        DataTable hobbyDt = HttpRuntime.Cache["hobbyDt"] as DataTable;
        return hobbyDt;
    }

    private void AddCache(string key, object data)
    {
        System.Web.Caching.Cache dc = HttpRuntime.Cache;
        if (dc[mainKey[0]] == null)
            dc.Insert(mainKey[0], DateTime.Now);

        System.Web.Caching.CacheDependency cd = new System.Web.Caching.CacheDependency(null, mainKey);
        dc.Insert(GetCacheKey(key), data, cd, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration);
    }

    private void RemoveCache()
    {
        System.Web.Caching.Cache dc = HttpRuntime.Cache;
        if (dc[mainKey[0]] != null)
            dc[mainKey[0]] = DateTime.Now;
    }

    private string GetCacheKey(string key)
    {
        return mainKey[0] + "-" + key;
    }
}

 

实现预加载(proactive loading)
Global.asax

void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码
        OdsDataManager om = new OdsDataManager();
        HttpRuntime.Cache.Insert("countryDt", om.GetCountry(), null,
            System.Web.Caching.Cache.NoAbsoluteExpiration,
            System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
        HttpRuntime.Cache.Insert("hobbyDt", om.GetHobby(), null,
            System.Web.Caching.Cache.NoAbsoluteExpiration,
            System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
        om = null;
    }
时间: 2024-08-05 00:11:10

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

GridView实战二:使用ObjectDataSource数据源控件

前言: ObjectDataSource数据源控件优点甚多,确实令人爱不惜手,但不支持重绑定这一项确实让人失望.下面的实战二将通过ObjectDataSource配合GridView来实现删.改.分页.排序,并分析使用cache后排序失灵的原因.   实战: 1.效果: 图1.显示状态 图2.编辑状态   2.代码: .aspx <asp:ObjectDataSource runat="server" ID="ods" EnablePaging="t

数据库组件 Hxj.Data (二十三) (自定义缓存)

配置的缓存并不能满足我们的需求,例如有时候需要刷新缓存,或者某次查询缓存时间或者缓存依赖 不一样等. 刷新缓存 例如: DbSession.Default.From<Products>().Where(Products._.ProductID == 1).Refresh ().ToFirst(); Refresh()方法设置了刷新缓存,即不从缓存中读取,直接从数据库读取最新数据,并重新缓存. 设置查询的缓存有效期. 例如: DbSession.Default.From<Products&

在ASP.NET 2.0中操作数据之二十七:创建自定义排序用户界面_自学过程

简介 显示大量已经按类别(不是很多)排序的数据但没有类别分界线,用户很难找到所需要的类别.例如,数据库中只有9个类别(8个不同的类别和1个null),共81种产品.现在用一个GridView列出所有产品,假设有用户对类别Seafood的产品感兴趣,她一定会按类别排序,把Seafood产品排列在一起.排序后,用户便寻找Seafood产品开始和结束的地方.虽然是按英文字母排列类别不难找到Seafood,但仍要花些时间在GridView寻找.为了进一步的区分类别,许多网站使用类别分界线这种排序用户界面

Windows 8开发入门(二十) Windows 8中的GridView使用(二)

Windows 8中的GridView使用(二)和DataTemplateSelector 在本文中所讲述内容的实例仍然沿用于上篇文章,有什么疑惑可以参考上篇文章. 一 GroupStyle 在GridView控件中我们可以对数据进行分组显示,通过对GridView的GroupStyle进行控制,分别设置 GroupStyle.HeaderTemplate和GroupStyle.Panel.如下代码: <GridView.GroupStyle> <GroupStyle> <G

memcached spring mybatis 如何自定义缓存的key

问题描述 memcached spring mybatis 如何自定义缓存的key 目前有两个系统,一个是hibernate+memcached 设置key的 规则是 对象+id 再转成MD5,我想让 smm 也用这种规则该怎么弄?**现在smm是通过配置文件写死的!**用的是这种结构http://blog.csdn.net/yfisaboy/article/details/41820617

对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解_jquery

虽然jquery的较新的api已经很好用了, 但是在实际工作还是有做二次封装的必要,好处有:1,二次封装后的API更加简洁,更符合个人的使用习惯:2,可以对ajax操作做一些统一处理,比如追加随机数或其它参数.同时在工作中,我们还会发现,有一些ajax请求的数据,对实时性要求不高,即使我们把第一次请求到的这些数据缓存起来,然后当相同请求再次发起时直接拿之前缓存的数据返回也不会对相关功能有影响,通过这种手工的缓存控制,减少了ajax请求,多多少少也能帮助我们提高网页的性能.本文介绍我自己关于这两方

hibernate3学习笔记(二十二)|Query缓存机制

接前面的例子:http://blog.csdn.net/kunshan_shenbin/archive/2008/09/03/2874375.aspx 测试代码如下: 1.package com.hb3.pack_22;2.3.import java.io.IOException;4.import java.sql.SQLException;5.import java.util.List;6. 7.import org.hibernate.Query;8.import org.hibernate

WCF技术剖析之八:ClientBase&lt;T&gt;中对ChannelFactory&lt;T&gt;的缓存机制

和传统的分布式远程调用一样,WCF的服务调用借助于服务代理(Service Proxy).而ChannelFactory<T>则是服务代理的创建者.WCF采用基于终结点(Endpoint)服务消费方式:WCF服务通过一个或者多个终结点暴露给潜在的服务消费者,服务的消费中通过与之匹配的终结点与之交互.在客户端,我们具有两种典型的服务代理创建方式,其一是通过诸如SvcUtil.exe这样的工具导入服务的元数据生成相应的服务代理(一个继承自ClientBase<T>的类型)代码和相关配置

Android使用缓存机制实现文件下载及异步请求图片加三级缓存_Android

首先给大家介绍Android使用缓存机制实现文件下载 在下载文件或者在线浏览文件时,或者为了保证文件下载的正确性,需要使用缓存机制,常使用SoftReference来实现. SoftReference的特点是它的一个实例保存对一个Java对象的软引用,该软引用的存在不妨碍垃圾收集线程对该Java对象的回收.也就是说,一旦SoftReference保存了对一个Java对象的软引用后,在垃圾线程对这个Java对象回收前,SoftReference类所提供的get()方法返回Java对象的强引用.另外