TitleCheckBoxList.cs

// Copyright � 2007 Jeffrey Bazinet, http://www.vwd-cms.com/
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;

namespace VwdCms
{
    public class TitleCheckBoxList : CheckBoxList
    {
        public const string TitleValue = "###title###";
        public const string SpacerValue = "###spacer###";

        private Unit _titleWidth;

        public Unit TitleWidth
        {
            get { return _titleWidth; }
            set { _titleWidth = value; }
        }

        protected override void RenderItem(ListItemType itemType, int repeatIndex,
            RepeatInfo repeatInfo, HtmlTextWriter writer)
        {
            ListItem itm = this.Items[repeatIndex];
            string val = itm.Value;

            if (val == TitleValue || val == SpacerValue)
            {
                if (repeatIndex == 0)
                {
                    StringWriter sw = new StringWriter();
                    HtmlTextWriter dummyWriter = new HtmlTextWriter(sw);
                    base.RenderItem(itemType, repeatIndex, repeatInfo, dummyWriter);
                }

                if (val == TitleValue)
                {
                    Label lbl = new Label();
                    lbl.ID = this.ClientID + this.ClientIDSeparator + repeatIndex.ToString();
                    lbl.Font.CopyFrom(this.Font);
                    lbl.Font.Bold = true;
                    lbl.Text = itm.Text;
                    if (this.TitleWidth != null)
                    {
                        lbl.Width = this.TitleWidth;
                    }
                    lbl.RenderControl(writer);
                }
                else if (val == SpacerValue)
                {
                    writer.Write(HtmlTextWriter.SpaceChar);
                }
            }
            else
            {
                base.RenderItem(itemType, repeatIndex, repeatInfo, writer);
            }
        }
    }
}