從ASP.NET Portal Starter Kit中學到的調整順序新思路

來源:互聯網
上載者:User

在ASP.NET Portal Starter Kit中有在列表框中選擇指定項,通過點擊上下按鈕來實現排序的功能(如)。

   

通常我想到的方法是(以:上移為例):擷取選中項的排序號和選中項的上一項的排序號,交換它們的排序號即可。排序號的方式,就以1,2,3,4……的形式,建立的標籤的序號在最後一個的基礎上加一。在ASP.NET Portal Starter Kit中採取的方式是:通過1,3,5,7……的形式來表示排序號,每一次增刪都重新構造排序號。在上移時,將當前的排序號減3,這樣新的排序號就在它原來上一位的前面,且在上兩位的後面。如:將第7位上移,那麼新的順序是1,3,4,5,9。

代碼如下(部分代碼,詳細的可對照Tabs.ascx.cs中的代碼看):
//上移下移代碼

if (tabList.SelectedIndex != -1) 

{

    int delta;

    //因為標籤排序號是1,3,5,7,9方式排列的

    //將一個標籤的上移或下移一位,就把標籤序號加減3,正好為一偶數就在前後一位的前面或後面。

    //如:將第7位上移,那麼新的順序是1,3,4,5,9

    if (cmd == "down") 

    {

        delta = 3;

    }

    else 

    {

        delta = -3;

    }

    TabItem t;

    t = (TabItem) portalTabs[tabList.SelectedIndex];

    t.TabOrder += delta; 

    // 重新排序構造新的排序號

    OrderTabs();

}


/**//// <summary>

/// 將portalTabs中的標籤排序

/// </summary>

private void OrderTabs () 

{

    int i = 1;

    // 使用指定的比較子對部分 System.Collections.ArrayList 中的元素進行排序。

    // portalTabs中的對象是TabItem,TabItem對象繼承了IComparable介面,實現了以TabOrder的CompareTo

    portalTabs.Sort();

    // renumber the order and save to database

    // 將排序後的資訊存入XML

    foreach (TabItem t in portalTabs) 

    {

        // 將標籤的排序號按1, 3, 5,遞增的順序排列

        t.TabOrder = i;

        i += 2;

        // 將新的排序號寫入使用者設定檔

        Configuration config = new Configuration();

        config.UpdateTabOrder(t.TabId, t.TabOrder);

    }

}

 

這種方法其實我覺得並不好,只能算是一個新的思路。在OrderTabs()時每次都要迴圈更新使用者設定檔,我覺的還不如,交換序號後在更新使用者設定檔。但是用交換序號的方式,要判斷是否選中項為第一項(不能上移)或是最後一項(不能下移)。而且程式中還有要將管理項作為最後一項的要求,用交換序號的方式可能又要多寫不少代碼。可能還有其他的好處我沒有想到,所以權衡利弊還是用他的方法吧!

順便說一個Bug,好像預設提供的程式不能實現上移下移的功能,不知大家遇到了沒有。要將Configuration.cs檔案中SaveSiteSettings()的方法修改一下才行,修改後的代碼:
public void SaveSiteSettings()

{

    // 原來的:從Cache中擷取網站設定資訊資料集(好像是個Bug,因為每次更新資料是更新的HttpContext.Current.Items中的)

    //SiteConfiguration siteSettings = (SiteConfiguration) HttpContext.Current.Cache["SiteSettings"];

    // 修改後的

    SiteConfiguration siteSettings = (SiteConfiguration) HttpContext.Current.Items["SiteSettings"];


    // 如果Cache中沒有,則重新構建

    if(siteSettings == null)

    {

        // If SaveSiteSettings() is called once, the cache is cleared.  If it is

        // then called again before Global.Application_BeginRequest is called, 

        // which reloads the cache, the siteSettings object will be Null 

        // (這一句不知翻譯的對不對,好像很重要)如果SaveSiteSettings()被調用過一次後,Cache就回被清除。如果它再一次被調用在Global.Application_BeginRequest前siteSettings為null則重新寫Cache

        siteSettings = GetSiteSettings();

    }

    string configFile = HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["configFile"]);


    // Object is evicted from the Cache here.  

    // 將變更後的資料集寫入到Xml檔案

    siteSettings.WriteXml(configFile);

}

更多相關內容:點擊這裡>>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.