手把手教你写Ajax驱动的DataGrid控件(三)
点击次数:19 次 发布日期:2008-11-26 09:55:23 作者:源代码网
|
源代码网推荐 保留数据源很容易,也很好实现,我们这里采用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)。 源代码网推荐 源代码网供稿. |
