public class EditDateSpecial : EditControl, IDate, IResetable, IBindable, ILocal { private DropDownList Months = new DropDownList(); private DropDownList Years = new DropDownList(); private DropDownList Time = new DropDownList(); public int StartYear = 1900; public int EndYear = 2010; private Calendar Cal; public DateTime StartDate; private string RealValue; private DateTime ActualTime; private Label WarningLabel = new Label(); protected void LoadTime(object o, System.EventArgs e) { try { RealValue = this.ViewState["RealValue"].ToString(); } catch{} } public EditDateSpecial() { this.Load += new System.EventHandler(LoadTime); Cal = new Calendar(); WarningLabel.Text = "This date doesn't exist!
"; WarningLabel.Visible = false; Cal.SelectionChanged += new EventHandler(HideWarning); Months.SelectedIndexChanged += new EventHandler(ChangeMonths); Years.SelectedIndexChanged += new EventHandler(ChangeYears); Months.AutoPostBack = true; Years.AutoPostBack = true; this.EnableViewState = true; this.Controls.Add(new LiteralControl("

")); this.Controls.Add(Months); this.Controls.Add(Years); this.Controls.Add(new LiteralControl(" Time: ")); this.Controls.Add(Time); this.Controls.Add(new LiteralControl("
")); this.Controls.Add(WarningLabel); this.Controls.Add(Cal); this.Controls.Add(new LiteralControl("

")); AddYears(); AddMonths(); AddTime(); } public new string textValue { get { DateTime D = Cal.SelectedDate; int Hours = Int32.Parse(Time.SelectedItem.Text.Substring(0,2)); int Minutes = Int32.Parse(Time.SelectedItem.Text.Substring(3,2)); return new DateTime(D.Year,D.Month,D.Day,Hours,Minutes,0).ToString(); } set { Cal.SelectedDate = System.DateTime.Parse(value); } } public new void Bind(string bound) { try { if (bound == null || bound == "") { if (StartDate == new DateTime(0001,01,01)) { Cal.TodaysDate = System.DateTime.Now; Cal.SelectedDate = new DateTime(0001,01,01); ActualTime = new DateTime(0001,01,01); } else { Cal.TodaysDate = StartDate; } RealValue = bound; } else { Cal.SelectedDate = System.DateTime.Parse(bound); Cal.TodaysDate = System.DateTime.Parse(bound); ActualTime = System.DateTime.Parse(bound); RealValue = bound; this.ViewState["RealValue"] = bound; } } catch{} try { this.Months.SelectedItem.Selected = false; this.Years.SelectedItem.Selected = false; this.Months.Items.FindByValue(Cal.SelectedDate.Month.ToString()).Selected = true; this.Years.Items.FindByValue(Cal.SelectedDate.Year.ToString()).Selected = true; } catch {} } public void HideWarning(object o, EventArgs e) { WarningLabel.Visible=false; } public void ChangeMonths(object o, EventArgs e) { try { Cal.TodaysDate = new DateTime(Cal.TodaysDate.Year,System.Int32.Parse(Months.SelectedItem.Value),Cal.TodaysDate.Day); WarningLabel.Visible=false; } catch{WarningLabel.Visible=true;} } public void ChangeYears(object o, EventArgs e) { try { Cal.TodaysDate = new DateTime(System.Int32.Parse(Years.SelectedItem.Text),Cal.TodaysDate.Month,Cal.TodaysDate.Day); WarningLabel.Visible=false; } catch{WarningLabel.Visible=true;} } private void AddTime() { if (Time.Items.Count == 0) { for ( int i = 0 ; i < 24 ; i++ ) { for ( int j = 0 ; j < 60 ; j++ ) { string TempHour; string TempMinute; if (i < 10) TempHour = "0" + i; else TempHour = i.ToString(); if (j < 10) TempMinute = "0" + j; else TempMinute = j.ToString(); Time.Items.Add(new ListItem(TempHour + ":" + TempMinute,TempHour + ":" + TempMinute)); } } } } private void AddMonths() { Months.Items.Add(new ListItem("January","1")); Months.Items.Add(new ListItem("February","2")); Months.Items.Add(new ListItem("March","3")); Months.Items.Add(new ListItem("April","4")); Months.Items.Add(new ListItem("May","5")); Months.Items.Add(new ListItem("June","6")); Months.Items.Add(new ListItem("July","7")); Months.Items.Add(new ListItem("August","8")); Months.Items.Add(new ListItem("September","9")); Months.Items.Add(new ListItem("October","10")); Months.Items.Add(new ListItem("November","11")); Months.Items.Add(new ListItem("December","12")); } private void AddYears() { int Counter = StartYear; while (Counter <= EndYear) { Years.Items.Add(new ListItem(Counter.ToString(),Counter.ToString())); Counter++; } } protected override void Render(HtmlTextWriter w) { if (this.ParentAdmin.AdminMode == Admin.Mode.Edit && Editable == true || this.ParentAdmin.AdminMode == Admin.Mode.Add && Addable == true) { ActualTime = DateTime.Parse(RealValue); string Hours, Minutes; Time.SelectedItem.Selected = false; if (ActualTime.Hour < 10) Hours = "0" + ActualTime.Hour; else Hours = ActualTime.Hour.ToString(); if (ActualTime.Minute < 10) Minutes = "0" + ActualTime.Minute; else Minutes = ActualTime.Minute.ToString(); this.Time.Items.FindByText(Hours+":"+Minutes).Selected = true; w.Write("" +Title+ ""); base.Render(w); w.Write(""); } else { w.Write("" +Title+ ""); try { if ((RealValue == null || RealValue == "") && Cal.SelectedDate == new DateTime(0001,01,01)) w.Write("[null]"); else if (Cal.SelectedDate != new DateTime(0001,01,01)) w.Write(Cal.SelectedDate.ToShortDateString() + " " + ActualTime.ToLongTimeString()); } catch{} w.Write(""); } } }