Link to home
Start Free TrialLog in
Avatar of mathieu_cupryk
mathieu_cuprykFlag for Canada

asked on

//NOTE: The following placeholder declaration is required by the Web Form Designer.

Why do I need this in my code?
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Data;
using System.Globalization;
using System.Diagnostics;
using System.Collections.ObjectModel;
using System.IO;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.SessionState;
using System.ComponentModel;
 
namespace OmegaLove.Web.UI
{
   
    public partial class ctrlBreadCrumb : OmegaLoveBasePageUserControl
    {
        public struct PageCrumb
        {
            private short _level;
            private string _url;
            private string _linkName;
 
            public PageCrumb(short level, string url, string linkName)
            {
                _level = level;
                _url = url;
                _linkName = linkName;
            }
 
            public short Level
            {
                get { return _level; }
            }
 
            public string Url
            {
                get { return _url; }
            }
 
            public string LinkName
            {
                get { return _linkName; }
            }
        }
 
 
        protected System.Web.UI.WebControls.Label lblTrail;
        //NOTE: The following placeholder declaration is required by the Web Form Designer.
        //Do not delete or move it.
        private System.Object designerPlaceholderDeclaration;
 
        //Variable holding the Link name of the page
        private string _tailName;
 
        //Variable holding the level of the page
        private short _level;
 
        //The pagecrumb object of the current page
        private PageCrumb _pageCrumb = new PageCrumb();
 
        //We will use a sorted list as we can use the level as key 
        private SortedList _crumbList;
 
 
        //Each page has a level. The page should declare its level
        public short Level {
           // TO DO : We can check for some constraints here
           get { return _level; }
           set { _level = value; }
        }
 
        //Each page needs a meaningful name of it. Let them declare it
        public string TailName {
           // TO DO : We can check for some constraints here
           get { return _tailName; }
           set { _tailName = value; }
        }
 
        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
        }
 
        /// <summary>
        ///		Required method for Designer support - do not modify
        ///		the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
        }
 
        #endregion
 
 
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!(Page.IsPostBack))
            {
 
                //Minimum level is 1
                if ((_level <= 0))
                {
                    _level = 1;
                }
 
                //If no friendly name gives Untitled as default
                if ((string.IsNullOrEmpty(_tailName)))
                {
                    _tailName = "Untitled";
                }
 
                //Create a Crumb object based on the properties of this page
                _pageCrumb = new PageCrumb(_level, Request.RawUrl, _tailName);
 
                //Check our Crumb is there in the session...if not create and add it...else get it 
                if (Session["HASH_OF_CRUMPS"] == null)
                {
                    _crumbList = new SortedList();
                    Session.Add("HASH_OF_CRUMPS", _crumbList);
                }
                else
                {
                    _crumbList = (SortedList) Session["HASH_OF_CRUMPS"];
                }
 
                //Now modify the List of the breadcrumb
                ModifyList();
                // Put the breadcrumb from the session of sortlist
                PutBreadCrumbs();
 
 
            }
 
        }
 
        private void ModifyList()
        {
            //Remove all Entries from the list which is higher or equal in level
            //Because at a level there can be max 1 entry in the list
            RemoveLowerLevelCrumbs();
            //If level is 1 set the Crumb as home
            if (_pageCrumb.Level == 1)
            {
                _crumbList.Clear();
 
                _crumbList.Add((short)1, new PageCrumb(1, "/Home.aspx", "Home"));
            }
            else
            {
                //If nothing in the list adds the home link first
                if (_crumbList.Count == 0)
                {
                    _crumbList.Add((short)1, new PageCrumb(1, "/Home.aspx", "Home"));
                }
                //Now add the present list also no other check is required here as we have cleaned up the 
                //List at the start of the function
                _crumbList.Add(_level, _pageCrumb);
            }
        }
 
        //Function will remove all the entries from the list which is higher or equal to the
        //present level
        private void RemoveLowerLevelCrumbs()
        {
 
            ArrayList removalList = new ArrayList(_crumbList.Count);
            foreach (short level in _crumbList.Keys)
            {
                if ((level >= _level))
                {
                    removalList.Add(level);
                }
            }
            //Now remove all keys in the list
            foreach (short level in removalList)
            {
                _crumbList.Remove(level);
            }
        }
 
 
 
        private void PutBreadCrumbs()
        {
            StringBuilder linkString = new StringBuilder();
 
            PageCrumb pageCrumb = new PageCrumb();
            int index = 0;
 
            for (index = 0; index <= _crumbList.Count - 2; index++)
            {
                pageCrumb = (PageCrumb)_crumbList.GetByIndex(index);
                linkString.Append(string.Format("<a href = {0} >{1} </a>", pageCrumb.Url, pageCrumb.LinkName));
                linkString.Append(" > ");
            }
            //Add the tail also
            pageCrumb = (PageCrumb)_crumbList.GetByIndex(index);
            linkString.Append(pageCrumb.LinkName);
 
 
            lblTrail.Text = linkString.ToString();
        }
    }
}

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of microbolt
microbolt

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial