读者你好:
    请下参考下面的源代码:
//定义日历列
public class CalendarCell : DataGridViewTextBoxCell   
    {   
  
        public CalendarCell()   
            : base()   
        {   
            // Use the short date format.   
            this.Style.Format = "d";   
        }   
  
        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)   
                ctl.Value = DateTime.Now;   
            else  
                ctl.Value = (DateTime)this.Value;   
        }   
  
        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 DateTime.Now;   
            }   
        }   
    }   
  
    class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl   
    {   
        DataGridView dataGridView;   
        private bool valueChanged = false;   
        int rowIndex;   
  
        public CalendarEditingControl()   
        {   
            this.Format = DateTimePickerFormat.Short;   
        }   
  
        // Implements the IDataGridViewEditingControl.EditingControlFormattedValue    
        // property.   
        public object EditingControlFormattedValue   
        {   
            get  
            {   
                return this.Value.ToShortDateString();   
            }   
            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);   
        }   
    }  
   //调用和DataGridViewTextBoxColumn一样
    private CalendarColumn awardsDate;
    this.awardsDate = new CalendarColumn();
    this.awardsDate.DataPropertyName = "awardsDate";
    this.awardsDate.HeaderText = "颁奖日期";
    this.awardsDate.Name = "awardsDate";
    this.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {this.awardsDate});