轉自 http://www.cnblogs.com/wfyfngu/archive/2007/10/10/918931.html
在上一篇文章,我們實現了將Object類型的資料來源轉化為DataTable的目的。接下來,我們就要將資料來源保留下來,直到確定它們不再使用。
保留資料來源很容易,也很好實現,我們這裡採用Hashtable來實現資料的緩衝。但是,將資料來源保留到什麼時候呢?怎樣才能準確判斷資料來源不再被使用?我們稍後討論。
1.1 保留資料來源 AjaxGridHelper.csusing 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) 如果用戶端沒有按照預期工作(這是有可能的,因為用戶端代碼不可信任),我們就按事先約定清除到期的資料
>>待續!控制項源碼及簡單介紹請登陸 http://www.codeassistant.net/wfygrid/<<