日历控件最新修改

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.UI;
using System.ComponentModel;

namespace DAL
{
    public class DateControl : System.Web.UI.WebControls.WebControl, System.Web.UI.INamingContainer, System.Web.UI.IPostBackEventHandler
    {
        private static readonly object ClickKey = new object();

        [Description("单击日期触发的事件!")]
        public event EventHandler Click
        {
            add
            {
                Events.AddHandler(ClickKey, value);
            }
            remove
            {
                Events.RemoveHandler(ClickKey, value);
            }
        }

        private static readonly string[] header = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

        private DateTime startDate;

        /// <summary>
        /// Gets or sets the show date.
        /// </summary>
        /// <value>The show date.</value>
        [Description("格式必须为yyyy-MM一样")]
        public string StartDate
        {
            get
            {
                if (startDate.ToShortDateString() == null)
                    startDate = Convert.ToDateTime(System.DateTime.Now.Year + "-" + System.DateTime.Now.Month + "-01");
                return startDate.ToString("yyyy-MM");
            }
            set
            {
                if (value == null)
                {
                    startDate = Convert.ToDateTime(System.DateTime.Now.Year + "-" + System.DateTime.Now.Month + "-01");
                }
                else
                {
                    startDate = Convert.ToDateTime(value + "-01");
                }
            }
        }

        private DateTime endDate;
        [Description("格式必须为yyyy-MM一样")]
        public string EndDate
        {
            get
            {
                if (endDate.ToShortDateString() == null)
                    endDate = Convert.ToDateTime(System.DateTime.Now.Year + "-" + System.DateTime.Now.Month + "-01");
                return endDate.ToString("yyyy-MM");
            }
            set
            {
                if (value == null)
                {
                    endDate = Convert.ToDateTime(System.DateTime.Now.Year + "-" + System.DateTime.Now.Month + "-01");
                }
                else
                {
                    endDate = Convert.ToDateTime(value + "-01");
                }
            }
        }

        private string selectedValue;
        [Description("预定的日期")]
        public string SelectedValue
        {
            get
            {
                if (this.selectedValue == null)
                {
                    this.selectedValue = string.Empty;
                }
                return selectedValue;
            }
            set
            {
                this.selectedValue = value;
            }
        }

        public string SelectDate
        {
            get
            {
                if (Page.Request.Form[this.UniqueID + "hid"] != null)
                {
                    return Page.Request.Form[this.UniqueID + "hid"].ToString();
                }
                else
                {
                    return string.Empty;
                }
            }
        }

        protected override void OnPreRender(EventArgs e)
        {
          
            base.OnPreRender(e);
            if (!Page.IsClientScriptBlockRegistered("blogdate"))
            {
                Page.RegisterClientScriptBlock("blogdate", "<script type='text/javascript'> function Add(id,value){document.getElementById(id).value=document.getElementById(id).value+';'+value;}function Remove(id,value){document.getElementById(id).value=document.getElementById(id).value.replace(';'+value,'');}</script>");
               // Page.RegisterClientScriptBlock("sdfsa", "<script type='text/javascript'>alert('123');</script>");
            }
        }

        protected override void Render(HtmlTextWriter writer)
        {
          
            int j = 0;
            DateTime tempDate = new DateTime();
            writer.Write("<input type='hidden' name='" + this.UniqueID + "hid' id='" + this.UniqueID + "hid'/>");
            do
            {
                //为table标签定义属性和样式
                writer.AddAttribute(HtmlTextWriterAttribute.Width, "380px");
                //writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "1px");
                writer.AddAttribute(HtmlTextWriterAttribute.Border, "1px");
                writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
                writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
                writer.AddAttribute(HtmlTextWriterAttribute.Bordercolor, "#cccc99");

                writer.RenderBeginTag(HtmlTextWriterTag.Table);
                tempDate = startDate.AddMonths(j);
                writer.RenderBeginTag(HtmlTextWriterTag.Thead);
                writer.RenderBeginTag(HtmlTextWriterTag.Tr);
                writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
                writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "7");
                writer.RenderBeginTag(HtmlTextWriterTag.Td);
                writer.Write(tempDate.Year + "年" + tempDate.Month + "月");
                writer.RenderEndTag();
                writer.RenderEndTag();
                writer.RenderEndTag();
                writer.AddAttribute(HtmlTextWriterAttribute.Bgcolor, "#99CCCC");
                writer.RenderBeginTag(HtmlTextWriterTag.Tr);
                for (int i = 0; i < DateControl.header.Length; i++)
                {
                    writer.RenderBeginTag(HtmlTextWriterTag.Td);
                    writer.Write(DateControl.header[i]);
                    writer.RenderEndTag();
                }

                writer.RenderEndTag();
                DateTime end = tempDate.AddMonths(1);
                int days = ((TimeSpan)end.Subtract(tempDate)).Days;
                int spaceday = Convert.ToInt32(tempDate.DayOfWeek);
                writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
                writer.RenderBeginTag(HtmlTextWriterTag.Tr);
                for (int i = 0; i < spaceday; i++)
                {
                    writer.RenderBeginTag(HtmlTextWriterTag.Td);
                    writer.WriteLine("&nbsp;");
                    writer.RenderEndTag();
                }

                for (int i = 1; i <= days; i++)
                {
                    string tddate = tempDate.ToString("yyyy-MM") + "-" + i.ToString().PadLeft(2, '0');
                    writer.Write("<td οnmοusedοwn=/"if(this.style.backgroundColor!='#6495ed'){this.style.backgroundColor='#6495ed';}else{if(this.style.backgroundColor='#6495ed'){this.style.backgroundColor='White';}}/"");

                    writer.Write(" οnclick=/"if(this.style.backgroundColor!='#6495ed'){ Remove('" + this.UniqueID + "hid', '" +tddate+"');}else{Add('" + this.UniqueID + "hid','"+tddate+"');}");
                    //     writer.Write(Page.GetPostBackEventReference(this,this.StartDate+"-"+i.ToString().PadLeft(2,'0')));

                    if (tempDate.AddDays(i - 1).DayOfWeek == System.DayOfWeek.Saturday || tempDate.AddDays(i - 1).DayOfWeek == System.DayOfWeek.Sunday)
                    {
                        writer.Write("/"><font color='red'>" + i.ToString() + "</font></td>");
                    }
                    else
                    {
                        writer.Write("/">" + i.ToString() + "</td>");
                    }

                    if ((i + spaceday) % 7 == 0)
                    {
                        writer.RenderEndTag();
                        writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
                        writer.RenderBeginTag(HtmlTextWriterTag.Tr);
                    }
                }
                if ((spaceday + days) % 7 != 0)
                {
                    int allcount = spaceday + days > 35 ? 42 : 35;
                    for (int i = 0; i < allcount - spaceday - days; i++)
                    {
                        writer.RenderBeginTag(HtmlTextWriterTag.Td);
                        writer.Write("&nbsp;");
                        writer.RenderEndTag();
                    }
                    writer.RenderEndTag();
                    writer.RenderEndTag();
                    writer.RenderBeginTag(HtmlTextWriterTag.Br);
                }
                else
                {
                    writer.RenderEndTag();
                    writer.RenderEndTag();
                    writer.RenderBeginTag(HtmlTextWriterTag.Br);
                }
                j++;
            }
            while (tempDate < endDate);
        }

        protected virtual void OnClick(StringEventArgs e)
        {
            EventHandler clickEventDelegate = (EventHandler)Events[ClickKey];
            if (clickEventDelegate != null)
            {
                clickEventDelegate(this, e);
            }
        }

        #region IPostBackEventHandler 成员
        public void RaisePostBackEvent(string eventArgument)
        {
            //throw new Exception("The method or operation is not implemented.");
            OnClick(new StringEventArgs(eventArgument));
        }
        #endregion
    }

    public class StringEventArgs : EventArgs
    {
        private string argString;

        public string ArgString
        {
            get { return argString; }
        }

        public StringEventArgs(string arg)
        {
            this.argString = arg;
        }

        public override string ToString()
        {
            return this.argString;
        }
    }
}
 

 

调用页面的触发事件

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write("Current Select Is:<br>");
        Response.Write(this.DateControl1.SelectDate);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值