轉–手把手教你寫Ajax驅動的DataGrid控制項(三)

來源:互聯網
上載者:User
轉自 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/<<

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.