• 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
     }
    }

  • 相关阅读:
    EA教程 (四) SQLHelper类
    详解包含、扩展和泛化
    几种常用的单例模式详解
    我的分层
    EA教程(二)数据库
    软件版本号如何定义
    精解PV操作之信号量
    eclipse连接数据库驱动汇总
    [Leetcode 17] 13 Roman to Integer
    Short term goal for 2013 rest time
  • 原文地址:https://www.cnblogs.com/think/p/170128.html
Copyright © 2020-2023  润新知