DateChooser源码--DateChooser.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.Drawing;
using System.Reflection;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using CNBlogs.DCT.THIN.Design;
namespace CNBlogs.DCT.THIN
{
[
DefaultEvent("DateChanged"),
DefaultProperty("SelectedDate"),
Designer(typeof(DataChooserDesigner)),
ValidationProperty("SelectedDateText"),
ToolboxData("<{0}:DateChooser runat=\"server\"></{0}:DateChooser>"),
ToolboxBitmap(typeof(DateChooser),@"DateChooser.bmp")
]
public class DateChooser:WebControl, INamingContainer
{
#region Variable
private TextBox _dateTextBox;
private HtmlImage _drop;
private HtmlImage _up;
private HtmlImage _down;
private Style _textStyle;
private Style _imgStyle;
private bool _renderClientScript = true;
private bool _renderPopupScript = true;
private static readonly object EventDateChanged = new object();
private static string ClientFilesUrlPrefix;
#endregion
public DateChooser()
{
}
#region Properties
#region Override Properties
[
Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),EditorBrowsable(EditorBrowsableState.Never)
]
public override Color BackColor
{
get
{
return Color.Empty;
}
set
{
}
}
[
Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),EditorBrowsable(EditorBrowsableState.Never)
]
public override BorderStyle BorderStyle
{
get
{
return BorderStyle.NotSet;
}
set
{
}
}
[
Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),EditorBrowsable(EditorBrowsableState.Never)
]
public override Unit BorderWidth
{
get
{
return Unit.Empty;
}
set
{
}
}
[
Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),EditorBrowsable(EditorBrowsableState.Never)
]
public override FontInfo Font
{
get
{
return null;
}
}
[
Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),EditorBrowsable(EditorBrowsableState.Never)
]
public override Color ForeColor
{
get
{
return Color.Empty;
}
set
{
}
}
[
Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),EditorBrowsable(EditorBrowsableState.Never)
]
public override Unit Height
{
get
{
return Unit.Empty;
}
set
{
}
}
[
Browsable(false),DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),EditorBrowsable(EditorBrowsableState.Never)
]
public override Unit Width
{
get
{
return Unit.Empty;
}
set
{
}
}
#endregion
[NotifyParentProperty(true),
DefaultValue(Culture.Cn),
TypeConverter(typeof(EnumConverter)),
Category("Behavior"),
Description("切换日期面板及上面的提示信息使用的语言。")
]
public Culture Culture
{
get
{
object o = ViewState["Culture"];
return (o==null)?Culture.Cn:(Culture)o;
}
set
{
if(value > Culture.En || value < Culture.Cn)
throw new ArgumentOutOfRangeException("Cn or En.");
ViewState["Culture"] = value;
}
}
[NotifyParentProperty(true),
DefaultValue(false),
TypeConverter(typeof(BooleanConverter)),
Category("Behavior"),
Description("设置是否允许空值。")
]
public bool AllowNull
{
get
{
object o = ViewState["AllowNull"];
return (o==null)?false:(bool)o;
}
set
{
ViewState["AllowNull"] = value;
}
}
[NotifyParentProperty(true),
DefaultValue(FrameContainer.Frame),
TypeConverter(typeof(EnumConverter)),
Category("Behavior"),
Description("设置日期选择面板使用的载体,现行版本提供None和Frame两种选择,下一版本将提供Popup窗口支持。")
]
public FrameContainer Container
{
get
{
object o = ViewState["Container"];
return (o == null)?FrameContainer.Frame:(FrameContainer)o;
}
set
{
if(value < FrameContainer.None || value > FrameContainer.Frame)
throw new ArgumentOutOfRangeException("None or Frame.");
ViewState["Container"] = value;
}
}
[
NotifyParentProperty(true),
Category("Behavior"),
DefaultValue(false),
Description("日期改变时,是否引发页面回传。设为True则用户每次在Calendar中选取日期和点击控件后面的的增减按钮将引发页面回传。")
]
public bool AutoPostBack
{
get
{
EnsureChildControls();
return _dateTextBox.AutoPostBack;
}
set
{
EnsureChildControls();
_dateTextBox.AutoPostBack = value;
}
}
public override ControlCollection Controls
{
get
{
EnsureChildControls();
return base.Controls;
}
}
[NotifyParentProperty(true),
Category("Behavior"),
DefaultValue(true),
Description("是否起用日历功能,设为否则控件只生成一个Input。")
]
public bool EnableClientScript
{
get
{
object b = ViewState["EnableClientScript"];
return (b == null) ? true : (bool)b;
}
set
{
ViewState["EnableClientScript"] = value;
}
}
[NotifyParentProperty(true),
Category("Behavior"),
DefaultValue(true),
Description("是否增减日期的小按钮。")
]
public bool ShowButton
{
get
{
object b = ViewState["ShowButton"];
return (b == null) ? true : (bool)b;
}
set
{
ViewState["ShowButton"] = value;
}
}
[NotifyParentProperty(true),
Category("Behavior"),
DefaultValue(false),
Description("日期是否只读。")
]
public virtual bool ReadOnly
{
get
{
EnsureChildControls();
return _dateTextBox.ReadOnly;
}
set
{
EnsureChildControls();
_dateTextBox.ReadOnly = value;
}
}
[
NotifyParentProperty(true),
Category("Behavior"),
DefaultValue("-"),
Description("设置日期的间隔符。"),
TypeConverter(typeof(DateFormatSeparatorConverter))
]
public string DateFormatSeparator
{
get
{
object o = ViewState["DateFormatSeparator"];
return (o==null)?"-":o.ToString();
}
set
{
EnsureChildControls();
ViewState["DateFormatSeparator"] = value;
_dateTextBox.Text = _dateTextBox.Text.Replace("-","/").Replace("/",value);
}
}
[
NotifyParentProperty(true),
Category("Default"),
DefaultValue(""),
Description("最大日期值。日期选择器只支持从1745-1-1到9998-12-31之间的日期,此范围之外的日期请手工输入。"),
Editor(typeof(DateTimeStringEditor),typeof(System.Drawing.Design.UITypeEditor))
]
public string MaxDate
{
get
{
object o = ViewState["MaxDate"];
return (o==null)?String.Empty:o.ToString();
}
set
{
if(value.Trim() != string.Empty)
{
DateTime dt = DateTime.Parse(value);
if(MinDate.Trim() != string.Empty)
{
DateTime dt2 = DateTime.Parse(MinDate);
if(dt < dt2)
throw new ArgumentException("MaxDate不能早于MinDate","MaxDate");
}
ViewState["MaxDate"] = dt.ToString("yyyy-MM-dd");
}
else
{
ViewState["MaxDate"] = string.Empty;
}
}
}
[
NotifyParentProperty(true),
Category("Default"),
DefaultValue(""),
Description("最小日期值。日期选择器只支持从1745-1-1到9998-12-31之间的日期,此范围之外的日期请手工输入。"),
Editor(typeof(DateTimeStringEditor),typeof(System.Drawing.Design.UITypeEditor))
]
public string MinDate
{
get
{
object o = ViewState["MinDate"];
return (o==null)?string.Empty:o.ToString();
}
set
{
if(value.Trim() != string.Empty)
{
DateTime dt = DateTime.Parse((string)value);
if(MaxDate.Trim() != string.Empty)
{
DateTime dt2 = DateTime.Parse(MaxDate);
if(dt > dt2)
throw new ArgumentException("MaxDate不能早于MinDate","MinDate");
}
ViewState["MinDate"] = dt.ToString("yyyy-MM-dd");
}
else
{
ViewState["MinDate"] = string.Empty;
}
}
}
[NotifyParentProperty(true),
DefaultValue(RevealTransitionType.None),
Category("Behavior"),
Editor(typeof(RevealTransitionEditor),typeof(System.Drawing.Design.UITypeEditor)),
Description("下拉Calendar弹出时使用的效果。")
]
public RevealTransitionType TransitionType
{
get
{
object b = ViewState["TransitionType"];
return (b==null)?RevealTransitionType.RandomTransition:(RevealTransitionType)b;
}
set
{
if(value < RevealTransitionType.BoxIn || value > RevealTransitionType.None)
{
throw new ArgumentOutOfRangeException("TransitionType");
}
ViewState["TransitionType"] = value;
}
}
[NotifyParentProperty(true),
DefaultValue(0.2),
TypeConverter(typeof(DoubleConverter)),
Category("Behavior"),
Description("弹出效果的完成时间,单位为秒。")
]
public double Duration
{
get
{
object b = ViewState["Duration"];
return (b==null)?0.2:(double)b;
}
set
{
if(value > 2)
{
throw new ArgumentOutOfRangeException("时间不能设得太长。");
}
ViewState["Duration"] = value;
}
}
[
NotifyParentProperty(true),
Browsable(false),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public virtual bool IsDateSelected
{
get
{
object d = ViewState["SelectedDate"];
return (d != null);
}
}
[
NotifyParentProperty(true),
Bindable(true),
Category("Default"),
Editor(typeof(DateTimeStringEditor),typeof(System.Drawing.Design.UITypeEditor)),
Description("设置当前选择的日期。日期选择器只支持从1745-1-1到9998-12-31之间的日期,此范围之外的日期请手工输入。")
]
public virtual string SelectedDate
{
get
{
object d = ViewState["SelectedDate"];
return (d == null) ? string.Empty : d.ToString();
}
set
{
EnsureChildControls();
if(value.Trim() != string.Empty)
{
DateTime dt = DateTime.Parse(value);
ViewState["SelectedDate"] = value;
_dateTextBox.Text = DateToString(dt);
}
else
{
ViewState["SelectedDate"] = value;
_dateTextBox.Text = string.Empty;
}
}
}
#region Appearence
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"#DCEDFD"),
TypeConverter(typeof(WebColorConverter)),
Description("亮色,应用于面板背景等处。")
]
public Color LightColor
{
get
{
object o = ViewState["LightColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString("#DCEDFD"))):(Color)o;
}
set
{
ViewState["LightColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"#C5D5FC"),
TypeConverter(typeof(WebColorConverter)),
Description("主色,应用于按钮背景等处。")
]
public Color MidColor
{
get
{
object o = ViewState["MidColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString("#C5D5FC"))):(Color)o;
}
set
{
ViewState["MidColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"#83A6F4"),
TypeConverter(typeof(WebColorConverter)),
Description("深色,应用于选择面板上按钮背景等处。")
]
public Color DarkColor
{
get
{
object o = ViewState["DarkColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString("#83A6F4"))):(Color)o;
}
set
{
ViewState["DarkColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"#ABC1F4"),
TypeConverter(typeof(WebColorConverter)),
Description("主色,应用于边框等处。")
]
public override Color BorderColor
{
get
{
object o = ViewState["BorderColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString("#ABC1F4"))):(Color)o;
}
set
{
ViewState["BorderColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"#ff9900"),
TypeConverter(typeof(WebColorConverter)),
Description("应用于鼠标Over。")
]
public Color OverColor
{
get
{
object o = ViewState["OverColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString("#ff9900"))):(Color)o;
}
set
{
ViewState["OverColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"Pink"),
TypeConverter(typeof(WebColorConverter)),
Description("出错时输入框背景色。")
]
public Color WrongBackColor
{
get
{
object o = ViewState["WrongBackColor"];
return (o==null)?(Color.Pink):(Color)o;
}
set
{
ViewState["WrongBackColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"Red"),
TypeConverter(typeof(WebColorConverter)),
Description("错误时输入框的前景色。")
]
public Color WrongForeColor
{
get
{
object o = ViewState["WrongForeColor"];
return (o==null)?(Color.Red):(Color)o;
}
set
{
ViewState["WrongForeColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"#FF9900"),
TypeConverter(typeof(WebColorConverter)),
Description("当前选择日期背景色。")
]
public Color CurrentBackColor
{
get
{
object o = ViewState["CurrentBackColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString("#FF9900"))):(Color)o;
}
set
{
ViewState["CurrentBackColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"White"),
TypeConverter(typeof(WebColorConverter)),
Description("当前选择日期前景色。")
]
public Color CurrentForeColor
{
get
{
object o = ViewState["CurrentForeColor"];
return (o==null)?(Color.White):(Color)o;
}
set
{
ViewState["CurrentForeColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"#0066FF"),
TypeConverter(typeof(WebColorConverter)),
Description("今天背景色。")
]
public Color TodayBackColor
{
get
{
object o = ViewState["TodayBackColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString("#0066FF"))):(Color)o;
}
set
{
ViewState["TodayBackColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"White"),
TypeConverter(typeof(WebColorConverter)),
Description("今天前景色。")
]
public Color TodayForeColor
{
get
{
object o = ViewState["TodayForeColor"];
return (o==null)?(Color.White):(Color)o;
}
set
{
ViewState["TodayForeColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),""),
TypeConverter(typeof(WebColorConverter)),
Description("相邻月的背景色。")
]
public Color OtherBackColor
{
get
{
object o = ViewState["OtherBackColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString(""))):(Color)o;
}
set
{
ViewState["OtherBackColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"#606060"),
TypeConverter(typeof(WebColorConverter)),
Description("相邻月日期的前景色。")
]
public Color OtherForeColor
{
get
{
object o = ViewState["OtherForeColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString("#606060"))):(Color)o;
}
set
{
ViewState["OtherForeColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),""),
TypeConverter(typeof(WebColorConverter)),
Description("当前月背景色。")
]
public Color MonthBackColor
{
get
{
object o = ViewState["MonthBackColor"];
return (o==null)?((Color)(new WebColorConverter().ConvertFromString(""))):(Color)o;
}
set
{
ViewState["MonthBackColor"] = value;
}
}
[NotifyParentProperty(true),
Category("Appearence"),
DefaultValue(typeof(Color),"MediumBlue"),
TypeConverter(typeof(WebColorConverter)),
Description("当前月前景色。")
]
public Color MonthForeColor
{
get
{
object o = ViewState["MonthForeColor"];
return (o==null)?(Color.MediumBlue):(Color)o;
}
set
{
ViewState["MonthForeColor"] = value;
}
}
#endregion
#endregion
#region Method
[EditorBrowsable(EditorBrowsableState.Never)]
public string DateToString(DateTime dt)
{
string v;
try
{
v= dt.ToString("yyyy-MM-dd");
}
catch
{
v =String.Empty;
}
return v.Replace("-",this.DateFormatSeparator);
}
[EditorBrowsable(EditorBrowsableState.Never)]
private string ConvertColorToString(Color c)
{
WebColorConverter wc = new WebColorConverter();
return wc.ConvertToString(c);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public string CCS(Color c)
{
return ConvertColorToString(c);
}
protected override void CreateChildControls()
{
//Controls.Clear();
_dateTextBox = new TextBox();
_dateTextBox.EnableViewState = true;
_dateTextBox.TextChanged += new EventHandler(this.dateTextBox_TextChanged);
_dateTextBox.ID = "DateInput";
Controls.Add(_dateTextBox);
}
private void dateTextBox_TextChanged(object sender, EventArgs e)
{
// Handles the TextChanged event of the contained TextBox.
EnsureChildControls();
try
{
string date = _dateTextBox.Text.Trim();
// Determine if the selected date has changed.
if ((IsDateSelected == false) || !(date==SelectedDate))
{
SelectedDate = date;
OnDateChanged(EventArgs.Empty);
}
}
catch
{
}
}
private void DetermineClientScriptLevel()
{
_renderClientScript = false;
_renderPopupScript = false;
if ((Page != null) && (Page.Request != null))
{
if (EnableClientScript)
{
HttpBrowserCapabilities browserCaps = Page.Request.Browser;
bool hasEcmaScript = (browserCaps.EcmaScriptVersion.CompareTo(new Version(1, 2)) >= 0);
bool hasDOM = (browserCaps.MSDomVersion.Major >= 4);
//bool hasBehaviors = (browserCaps.MajorVersion > 5) ||
// ((browserCaps.MajorVersion == 5) && (browserCaps.MinorVersion >= .5));
bool hasBehaviors = browserCaps.MajorVersion >= 5 ;
_renderClientScript = hasEcmaScript && hasDOM;
_renderPopupScript = _renderClientScript && hasBehaviors;
}
}
}
private string GetClientFileUrl(string fileName)
{
if (ClientFilesUrlPrefix == null)
{
// Use the config setting to determine where the client files are located.
// Client files are located in the aspnet_client v-root and then distributed
// into subfolders by assembly name and assembly version.
string location = null;
if (Context != null)
{
IDictionary configData = (IDictionary)Context.GetConfig("system.web/webControls");
if (configData != null)
{
location = (string)configData["clientScriptsLocation"];
}
}
if (location == null)
{
location = "/aspnet_client/CNBlogs_DCT/thin/";
}
else if (location.IndexOf("{0}") >= 0)
{
//AssemblyName assemblyName = GetType().Assembly.GetName();
string assembly = "CNBlogs_DCT";//assemblyName.Name.Replace('.', '_').ToLower();
string version = "thin";//assemblyName.Version.ToString().Replace('.', '_');
location = String.Format(location, assembly, version);
}
ClientFilesUrlPrefix = location;
}
return ClientFilesUrlPrefix + fileName;
}
protected override void Render(HtmlTextWriter writer)
{
if (Page != null)
{
Page.VerifyRenderingInServerForm(this);
}
if(_renderPopupScript||(Site!=null&&Site.DesignMode))
{
//Table
AddAttributesToRender(writer);
writer.AddStyleAttribute("Behavior","url('"+GetClientFileUrl("DateChooser.HTC")+"')");
//writer.AddAttribute(HtmlTextWriterAttribute.Background,"White");//_tblStyle.BackColor = Color.White;
writer.AddStyleAttribute(HtmlTextWriterStyle.BorderStyle,"solid");//_tblStyle.BorderWidth = new Unit(1);
writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth,"1px");//.CellPadding = 1;
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding,"0");//_tblStyle.CellSpacing = 0;
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing,"1");
writer.AddStyleAttribute(HtmlTextWriterStyle.BorderColor,CCS(BorderColor));//_tblStyle.BorderColor = BorderColor;
if(ControlStyleCreated)
{
if(ControlStyle.CssClass != null && ControlStyle.CssClass != string.Empty)
writer.AddAttribute(HtmlTextWriterAttribute.Class,ControlStyle.CssClass);
}
writer.AddAttribute(HtmlTextWriterAttribute.Bordercolor,CCS(BorderColor));
writer.AddAttribute("Container",Container.ToString());
writer.AddAttribute("LightColor",CCS(LightColor));
writer.AddAttribute("MidColor",CCS(MidColor));
writer.AddAttribute("DarkColor",CCS(DarkColor));
writer.AddAttribute("BorderColors",CCS(BorderColor));
writer.AddAttribute("OverColor",CCS(OverColor));
writer.AddAttribute("WrongBackColor",CCS(WrongBackColor));
writer.AddAttribute("WrongForeColor",CCS(WrongForeColor));
writer.AddAttribute("CurrentBackColor",CCS(CurrentBackColor));
writer.AddAttribute("CurrentForeColor",CCS(CurrentForeColor));
writer.AddAttribute("TodayBackColor",CCS(TodayBackColor));
writer.AddAttribute("TodayForeColor",CCS(TodayForeColor));
writer.AddAttribute("OtherBackColor",CCS(OtherBackColor));
writer.AddAttribute("OtherForeColor",CCS(OtherForeColor));
writer.AddAttribute("MonthBackColor",CCS(MonthBackColor));
writer.AddAttribute("MonthForeColor",CCS(MonthForeColor));
writer.AddAttribute("Culture",Culture.ToString());
writer.AddAttribute("AllowNull",AllowNull.ToString());
writer.AddAttribute("ReadOnly",ReadOnly.ToString());
writer.AddAttribute("DateFormatSeparator",DateFormatSeparator);
if(MaxDate != string.Empty)
writer.AddAttribute("MaxDate",MaxDate);
////else
//writer.AddAttribute("MaxDate","9998-12-31");
if(MinDate != string.Empty)
writer.AddAttribute("MinDate",MinDate);
//else
//writer.AddAttribute("MinDate","0001-01-01");
writer.AddAttribute("RevealTransitType",((int)TransitionType).ToString());
writer.AddAttribute("RevealTransitDuration",Duration.ToString());
if(_dateTextBox.Text.Trim()!=string.Empty)
writer.AddAttribute("OrgValue",_dateTextBox.Text.Trim());
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
//TdStyle
_imgStyle = new Style();
_imgStyle.BackColor = this.MidColor;
_imgStyle.BorderWidth = new Unit(1);
_imgStyle.BorderStyle = BorderStyle.Solid;
_imgStyle.BorderColor = this.BorderColor;
//FontInfo fi = new FontInfo()
//fi.Size = new FontUnit(new Unit(1));
//_imgStyle.Font = fi;
_imgStyle.AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Width,"13px");
writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize,"1px");
writer.AddAttribute(HtmlTextWriterAttribute.Align,"Center");
//writer.AddAttribute(HtmlTextWriterAttribute.Valign,"Middle");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//Drop
_drop = new HtmlImage();
_drop.EnableViewState = false;
_drop.Border = 0;
_drop.Align = "Middle";
_drop.Src = GetClientFileUrl("edit_0.gif");
_drop.RenderControl(writer);
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Td);
_textStyle = new Style();
_textStyle.Width = new Unit(72);
_textStyle.BorderWidth = new Unit(0);
_dateTextBox.ApplyStyle(_textStyle);
_dateTextBox.Style.Add("float","left");
//_dateTextBox.Text = DateToString(SelectedDate);
_dateTextBox.RenderControl(writer);
writer.RenderEndTag();
writer.AddAttribute(HtmlTextWriterAttribute.Height,"100%");
writer.AddAttribute(HtmlTextWriterAttribute.Width,"15");
if(!ShowButton)
writer.AddStyleAttribute("display","none");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//innerTable
writer.AddAttribute(HtmlTextWriterAttribute.Id,UniqueID+"InnerTable");
writer.AddAttribute(HtmlTextWriterAttribute.Width,"100%");
writer.AddAttribute(HtmlTextWriterAttribute.Height,"100%");
writer.AddAttribute(HtmlTextWriterAttribute.Border,"0px");
writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing,"0");
writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding,"0");
writer.RenderBeginTag(HtmlTextWriterTag.Table);
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
_imgStyle.AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Width,"15px");
writer.AddAttribute(HtmlTextWriterAttribute.Height,"50%");
writer.AddAttribute(HtmlTextWriterAttribute.Align,"Center");
//writer.AddAttribute(HtmlTextWriterAttribute.Valign,"Middle");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//up
_up = new HtmlImage();
_up.EnableViewState = false;
_up.Border = 0;
_up.Align = "Middle";
_up.Src = GetClientFileUrl("edit_1.gif");
_up.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderBeginTag(HtmlTextWriterTag.Tr);
_imgStyle.AddAttributesToRender(writer);
writer.AddAttribute(HtmlTextWriterAttribute.Width,"15px");
writer.AddAttribute(HtmlTextWriterAttribute.Height,"50%");
writer.AddAttribute(HtmlTextWriterAttribute.Align,"Center");
//writer.AddAttribute(HtmlTextWriterAttribute.Valign,"Middle");
writer.RenderBeginTag(HtmlTextWriterTag.Td);
//down
_down = new HtmlImage();
_down.EnableViewState = false;
_down.Border = 0;
_down.Align = "Middle";
_down.Src = GetClientFileUrl("edit_2.gif");
_down.RenderControl(writer);
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
writer.RenderEndTag();
}
else
{
AddAttributesToRender(writer);
if(ControlStyleCreated)
ControlStyle.AddAttributesToRender(writer);
_dateTextBox.RenderControl(writer);
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender (e);
DetermineClientScriptLevel();
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
writer.WriteLine("\n<!--\nDateChooser 博客园控件开发团队(www.cnblogs.com/team/dotnetcontrols.htm)\nTHIN(www.cnblogs.com/thinhunan)作品\n-->\n");
base.AddAttributesToRender (writer);
//writer.AddAttribute(HtmlTextWriterAttribute.Id,ClientID);
writer.AddAttribute(HtmlTextWriterAttribute.Name,UniqueID);
}
#endregion
#region Event
[
Category("Change"),
Description("用户更改选择的日期引发的事件。")
]
public event EventHandler DateChanged
{
add
{
Events.AddHandler(EventDateChanged, value);
}
remove
{
Events.RemoveHandler(EventDateChanged, value);
}
}
protected virtual void OnDateChanged(EventArgs e)
{
EventHandler handler = (EventHandler)Events[EventDateChanged];
if (handler != null)
{
handler(this, e);
}
}
#endregion
}
}