当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  手把手教你写Ajax驱动的DataGrid控件(三)

 手把手教你写Ajax驱动的DataGrid控件(三)

点击次数:19 次 发布日期:2008-11-26 09:55:23 作者:源代码网
源代码网推荐      在上一篇文章,我们实现了将Object类型的数据源转化为DataTable的目的。接下来,我们就要将数据源保留下来,直到确定它们不再使用。
源代码网推荐   保留数据源很容易,也很好实现,我们这里采用Hashtable来实现数据的缓存。但是,将数据源保留到什么时候呢?怎样才能准确判断数据源不再被使用?我们稍后讨论。
源代码网推荐   1.1 保留数据源 AjaxGridHelper.cs
源代码网推荐  using System;
源代码网推荐  using System.Collections;
源代码网推荐  
源代码网推荐  namespace Wfyfngu.Web.UI
源代码网推荐  {
源代码网推荐  
源代码网推荐   /// <summary>
源代码网推荐   /// AjaxGridHelper 的摘要说明。
源代码网推荐   /// </summary>
源代码网推荐   [Serializable]
源代码网推荐   internal class AjaxGridHelper
源代码网推荐   {
源代码网推荐  
源代码网推荐   // 主表
源代码网推荐   // key: 客户端唯一标识,用于区分用户
源代码网推荐   // value: 辅表
源代码网推荐   // --辅表
源代码网推荐   // key: 控件唯一标识
源代码网推荐   // value: DataGridSourceInfo对象
源代码网推荐   private static Hashtable CachedSource = new Hashtable(100);
源代码网推荐  
源代码网推荐   // 客户列表
源代码网推荐   private static Hashtable CachedClient = new Hashtable(100);
源代码网推荐  
源代码网推荐   /// <summary>
源代码网推荐   /// 允许的不活动时间(分钟)
源代码网推荐   /// 如果数据源没有被正常销毁,则在这个时间后调用相应的代码将其销毁
源代码网推荐   /// 当客户端在这个时间之内和服务器通信则认为其在线
源代码网推荐   /// 如果客户端在这个时间内没有和服务器通信,则删除他的所有数据
源代码网推荐   /// </summary>
源代码网推荐   private static int TimeOut = 720;
源代码网推荐  
源代码网推荐  
源代码网推荐  }
源代码网推荐  
源代码网推荐  }
源代码网推荐  
源代码网推荐   在上面的代码中,我们采用了两个哈希表,其中表CachedSource用来存贮数据源,而表CachedClient用来存贮AjaxGrid客户端的状态信息。它们具有一个随机生成的相同的GUID作为Key。加入我们在.aspx页面载入了一个AjaxGrid控件,则服务器为它分配一个唯一的GUID作为标识,这个GUID以Key的形式同时在CachedSource和CachedClient中生成一个Key-Value对,并存贮一些必要的信息。见下表:
源代码网推荐  哈希表 Key Value 说明
源代码网推荐  CachedSource b9fbb335-c2d8-4aee-bd2c-3518e7c27a3e new AjaxGridSourceInfo(...)
源代码网推荐  CachedClient b9fbb335-c2d8-4aee-bd2c-3518e7c27a3e 控件创建的时间
源代码网推荐  
源代码网推荐  
源代码网推荐   下面附上AjaxGridSourceInfo.cs的源码
源代码网推荐  
源代码网推荐  
源代码网推荐  using System;
源代码网推荐  
源代码网推荐  namespace Wfyfngu.Web.UI
源代码网推荐  {
源代码网推荐   /**//// <summary>
源代码网推荐   /// AjaxGridSourceInfo 的摘要说明。
源代码网推荐   /// </summary>
源代码网推荐   [Serializable]
源代码网推荐   internal class AjaxGridSourceInfo
源代码网推荐   {
源代码网推荐   private string[] _Captions = null;
源代码网推荐   private object _DataSource;
源代码网推荐  
源代码网推荐   /**//// <summary>
源代码网推荐   ///
源代码网推荐   /// </summary>
源代码网推荐   public AjaxGridSourceInfo() {}
源代码网推荐  
源代码网推荐   /**//// <summary>
源代码网推荐   ///
源代码网推荐   /// </summary>
源代码网推荐   /// <param name="captions">标题</param>
源代码网推荐   /// <param name="dateSource">数据源</param>
源代码网推荐   public AjaxGridSourceInfo(string[] captions, object dateSource)
源代码网推荐   {
源代码网推荐   _Captions = captions;
源代码网推荐   _DataSource = dateSource;
源代码网推荐   }
源代码网推荐  
源代码网推荐   /**//// <summary>
源代码网推荐   /// 获取AjaxGrid的标题集合
源代码网推荐   /// </summary>
源代码网推荐   public string[] Captions
源代码网推荐   {
源代码网推荐   get {return _Captions;}
源代码网推荐   }
源代码网推荐  
源代码网推荐   /**//// <summary>
源代码网推荐   /// 获取AjaxGrid用户控件的数据源
源代码网推荐   /// </summary>
源代码网推荐   public object DataSource
源代码网推荐   {
源代码网推荐   get {return _DataSource;}
源代码网推荐   }
源代码网推荐  
源代码网推荐   }
源代码网推荐  }
源代码网推荐   至此,我们完成了数据源的保存工作,接下来讨论我们遗留下来的问题。
源代码网推荐   1.2 数据源的销毁
源代码网推荐   数据源要在适当的时间销毁,如果太早,当然不行;如果太晚,势必造成内存的浪费。我们提供两种机制确保不再使用的数据源可以被销毁。
源代码网推荐   1) 由客户端通知服务器,告知指定的数据源不再使用
源代码网推荐   2) 如果客户端没有按照预期工作(这是有可能的,因为客户端代码不可信任),我们就按事先约定清除过期的数据
源代码网推荐    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华