public class CalendarColumn : DataGridViewColumn ...{ public CalendarColumn() : base(new CalendarCell()) ...{ } public override DataGridViewCell CellTemplate ...{ get ...{ return base.CellTemplate; } set ...{ if (value != null && !value.GetType().IsAssignableFrom(typeof(CalendarCell))) ...{ throw new InvalidCastException("Must be a CalendarCell "); } base.CellTemplate = value; } } } public class CalendarCell : DataGridViewTextBoxCell ...{ public CalendarCell() : base() ...{ // this.Style.Format = "d "; } public override void InitializeEditingControl(int rowIndex, object initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) ...{ base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); CalendarEditingControl ctl = DataGridView.EditingControl as CalendarEditingControl; ctl.Value = Convert.ToDateTime(this.Value.ToString()); } public override Type EditType ...{ get ...{ return typeof(CalendarEditingControl); } } public override Type ValueType ...{ get ...{ return typeof(DateTime); } } public override object DefaultNewRowValue ...{ get ...{ DateTime a = Convert.ToDateTime("00:00:00"); return a; } } } class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl ...{ DataGridView dataGridView; private bool valueChanged = false; int rowIndex; public CalendarEditingControl() ...{// this.Format = DateTimePickerFormat.Time; this.Format = DateTimePickerFormat.Custom; this.CustomFormat = "HH:mm"; this.ShowUpDown = true; } public object EditingControlFormattedValue ...{ get ...{ return this.Value.ToLongTimeString(); } set ...{ String newValue = value as String; if (newValue != null) ...{ this.Value = Convert.ToDateTime(newValue); } } } public object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context) ...{ return EditingControlFormattedValue; } public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle) ...{ this.Font = dataGridViewCellStyle.Font; this.CalendarForeColor = dataGridViewCellStyle.ForeColor; this.CalendarMonthBackground = dataGridViewCellStyle.BackColor; } public int EditingControlRowIndex ...{ get ...{ return rowIndex; } set ...{ rowIndex = value; } } public bool EditingControlWantsInputKey(Keys key, bool dataGridViewWantsInputKey) ...{ 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; } } public void PrepareEditingControlForEdit(bool selectAll) ...{ } public bool RepositionEditingControlOnValueChange ...{ get ...{ return false; } } public DataGridView EditingControlDataGridView ...{ get ...{ return dataGridView; } set ...{ dataGridView = value; } } public bool EditingControlValueChanged ...{ get ...{ return valueChanged; } set ...{ valueChanged = value; } } public Cursor EditingPanelCursor ...{ get ...{ return base.Cursor; } } protected override void OnValueChanged(EventArgs eventargs) ...{ valueChanged = true; this.EditingControlDataGridView.NotifyCurrentCellDirty(true); base.OnValueChanged(eventargs); } }