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(" ");
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(" ");
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);
}