286 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			286 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using System.Text;
 | |
| using System.Windows.Forms;
 | |
| 
 | |
| namespace AIMS.OremrUserControl
 | |
| {
 | |
|     public class CalendarColumn : DataGridViewColumn
 | |
|     {
 | |
|         private bool showUpDown = true;
 | |
|         public bool ShowUpDown
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return showUpDown;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 showUpDown = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public CalendarColumn()
 | |
| 
 | |
|             : base(new CalendarCell())
 | |
|         {
 | |
|         }
 | |
| 
 | |
|         public override DataGridViewCell CellTemplate
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.CellTemplate;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 // Ensure that the cell used for the template is a CalendarCell. 
 | |
|                 if (value != null && !value.GetType().IsAssignableFrom(typeof(CalendarCell)))
 | |
|                 {
 | |
|                     //PublicMethod.WriteLog(new Exception("Must be a CalendarCell"));
 | |
|                 }
 | |
|                 base.CellTemplate = value;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public class CalendarCell : DataGridViewTextBoxCell
 | |
|     {
 | |
|         public CalendarCell()
 | |
|             : base()
 | |
|         {
 | |
|             // Use the short date format.
 | |
|             this.Style.Format = "           ";//MM-dd hh:mm
 | |
|         }
 | |
| 
 | |
|         public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle)
 | |
|         {
 | |
|             // Set the value of the editing control to the current cell value.
 | |
|             base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle);
 | |
| 
 | |
|             CalendarEditingControl ctl = DataGridView.EditingControl as CalendarEditingControl;
 | |
|             if (this.Value == null)
 | |
|             {
 | |
|                 this.Value = DateTime.Now;
 | |
|                 this.Style.Format = "HH:mm";
 | |
|                 this.Tag = this.Value;
 | |
|                 ctl.Format = DateTimePickerFormat.Custom;
 | |
|                 ctl.CustomFormat = dataGridViewCellStyle.Format;
 | |
|             }
 | |
|             else if (this.Value.ToString() != "")
 | |
|             {
 | |
|                 try
 | |
|                 {
 | |
|                     ctl.Value = Convert.ToDateTime(this.Value);
 | |
|                     ctl.Tag = ctl.Value;
 | |
|                 }
 | |
|                 catch (Exception)
 | |
|                 {
 | |
|                 }
 | |
|                 this.Style.Format = "HH:mm";
 | |
|                 ctl.Format = DateTimePickerFormat.Custom;
 | |
|                 ctl.CustomFormat = dataGridViewCellStyle.Format;
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 //this.Value = null;
 | |
|                 this.Style.Format = "           ";
 | |
|             }
 | |
|             ctl.ValueChanged += new EventHandler(ctl_ValueChanged);
 | |
|             ctl.Leave += (s, e) =>
 | |
|             {
 | |
|                 this.Style.Format = "MM-dd HH:mm";
 | |
|                 ((CalendarEditingControl)s).Format = DateTimePickerFormat.Custom;
 | |
|             };
 | |
|         }
 | |
| 
 | |
|         void ctl_ValueChanged(object sender, EventArgs e)
 | |
|         {
 | |
|             CalendarEditingControl s = sender as CalendarEditingControl;
 | |
|             if (s.Tag == null || (DateTime.Parse(s.Tag.ToString()).Hour != DateTime.Parse(s.Text).Hour || DateTime.Parse(s.Tag.ToString()).Minute != DateTime.Parse(s.Text).Minute))
 | |
|                 SendKeys.Send("{right}");
 | |
|             s.Tag = s.Text;
 | |
|         }
 | |
| 
 | |
|         public override Type EditType
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 // Return the type of the editing contol that CalendarCell uses.
 | |
|                 return typeof(CalendarEditingControl);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public override Type ValueType
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 // Return the type of the value that CalendarCell contains.
 | |
|                 return typeof(DateTime);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public override object DefaultNewRowValue
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 // Use the current date and time as the default value.
 | |
|                 return null;// DateTime.Now.ToString("MM-dd HH:mm");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|     }
 | |
| 
 | |
|     public class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
 | |
|     {
 | |
|         DataGridView dataGridView;
 | |
| 
 | |
|         private bool valueChanged = false;
 | |
| 
 | |
|         int rowIndex;
 | |
| 
 | |
|         public CalendarEditingControl()
 | |
|         {
 | |
|             //this.ShowUpDown = base.ShowUpDown; 
 | |
|         }
 | |
| 
 | |
|         // Implements the IDataGridViewEditingControl.EditingControlFormattedValue 
 | |
|         // property. 
 | |
|         public object EditingControlFormattedValue
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return this.Value.ToString();
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 String newValue = value as String;
 | |
|                 if (newValue != null)
 | |
|                 {
 | |
|                     this.Value = DateTime.Parse(newValue);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Implements the 
 | |
|         // IDataGridViewEditingControl.GetEditingControlFormattedValue method. 
 | |
|         public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context)
 | |
|         {
 | |
|             return EditingControlFormattedValue;
 | |
|         }
 | |
| 
 | |
|         // Implements the 
 | |
|         // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method. 
 | |
|         public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
 | |
|         {
 | |
|             this.Font = dataGridViewCellStyle.Font;
 | |
|             this.CalendarForeColor = dataGridViewCellStyle.ForeColor;
 | |
|             this.CalendarMonthBackground = dataGridViewCellStyle.BackColor;
 | |
|         }
 | |
| 
 | |
|         // Implements the IDataGridViewEditingControl.EditingControlRowIndex 
 | |
|         // property. 
 | |
|         public int EditingControlRowIndex
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return rowIndex;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 rowIndex = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Implements the IDataGridViewEditingControl.EditingControlWantsInputKey 
 | |
|         // method. 
 | |
|         public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey)
 | |
|         {
 | |
|             // Let the DateTimePicker handle the keys listed. 
 | |
|             switch (key & Keys.KeyCode)
 | |
|             {
 | |
|                 case Keys.Left:
 | |
|                 case Keys.Up:
 | |
|                 case Keys.Down:
 | |
|                 case Keys.Right:
 | |
|                 case Keys.Home:
 | |
|                 case Keys.End:
 | |
|                 case Keys.PageDown:
 | |
|                 case Keys.PageUp:
 | |
|                     return true;
 | |
| 
 | |
|                 default:
 | |
|                     return false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit 
 | |
|         // method. 
 | |
|         public void PrepareEditingControlForEdit(bool selectAll)
 | |
|         {
 | |
|             // No preparation needs to be done. 
 | |
|         }
 | |
| 
 | |
|         // Implements the IDataGridViewEditingControl 
 | |
|         // .RepositionEditingControlOnValueChange property. 
 | |
|         public bool RepositionEditingControlOnValueChange
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Implements the IDataGridViewEditingControl 
 | |
|         // .EditingControlDataGridView property. 
 | |
|         public DataGridView EditingControlDataGridView
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return dataGridView;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 dataGridView = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Implements the IDataGridViewEditingControl 
 | |
|         // .EditingControlValueChanged property. 
 | |
|         public bool EditingControlValueChanged
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return valueChanged;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 valueChanged = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Implements the IDataGridViewEditingControl 
 | |
|         // .EditingPanelCursor property. 
 | |
|         public Cursor EditingPanelCursor
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return base.Cursor;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void OnValueChanged(EventArgs eventargs)
 | |
|         {
 | |
|             // Notify the DataGridView that the contents of the cell 
 | |
|             // have changed. 
 | |
|             valueChanged = true;
 | |
|             this.EditingControlDataGridView.NotifyCurrentCellDirty(true);
 | |
| 
 | |
|             base.OnValueChanged(eventargs);
 | |
| 
 | |
|         }
 | |
| 
 | |
|     }
 | |
| }
 |