using System;using System.Windows.Forms;namespace MasterSoft.WinUI{ ///<summary> /// DataGridView 中的日历列 ///</summary> ///<example > /// DataGridViewCalendarColumn ordBillSubConsignmentDateDataGridViewCalendarColumn = new DataGridViewCalendarColumn(); /// ordBillSubConsignmentDateDataGridViewCalendarColumn .DataPropertyName = myOrdBillDataSet.OrdBillSub.OrdBillSubConsignmentDateColumn.ColumnName; /// ordBillSubConsignmentDateDataGridViewCalendarColumn .HeaderText = "需求日期"; ///</example> publicclass MDataGridViewCalendarColumn : DataGridViewColumn { public MDataGridViewCalendarColumn() : base(new CalendarCell()) { } publicoverride DataGridViewCell CellTemplate { get { returnbase.CellTemplate; } set { // Ensure that the cell used for the template is a CalendarCell. if (value !=null&& !value.GetType().IsAssignableFrom(typeof(CalendarCell))) { thrownew InvalidCastException("Must be a CalendarCell"); } base.CellTemplate = value; } } } ///<summary> /// DataGridView 中的日历格 ///</summary> publicclass CalendarCell : DataGridViewTextBoxCell { public CalendarCell() : base() { // Use the short date format. this.Style.Format ="d"; } publicoverridevoid 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; try { ctl.Value = (DateTime)this.Value; } catch (Exception) { ctl.Value = DateTime.Now; } } publicoverride Type EditType { get { // Return the type of the editing contol that CalendarCell uses. returntypeof(CalendarEditingControl); } } publicoverride Type ValueType { get { // Return the type of the value that CalendarCell contains. returntypeof(DateTime); } } publicoverrideobject DefaultNewRowValue { get { // Use the current date and time as the default value. returnnull; } } } class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl { DataGridView dataGridView; privatebool valueChanged =false; int rowIndex; public CalendarEditingControl() { this.Format = DateTimePickerFormat.Short; } // Implements the IDataGridViewEditingControl.EditingControlFormattedValue // property. publicobject EditingControlFormattedValue { get { returnthis.Value.ToShortDateString(); } set { String newValue = value as String; if (newValue !=null) { this.Value = DateTime.Parse(newValue); } } } // Implements the // IDataGridViewEditingControl.GetEditingControlFormattedValue method. publicobject GetEditingControlFormattedValue( DataGridViewDataErrorContexts context) { return EditingControlFormattedValue; } // Implements the // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method. publicvoid ApplyCellStyleToEditingControl( DataGridViewCellStyle dataGridViewCellStyle) { this.Font = dataGridViewCellStyle.Font; this.CalendarForeColor = dataGridViewCellStyle.ForeColor; this.CalendarMonthBackground = dataGridViewCellStyle.BackColor; } // Implements the IDataGridViewEditingControl.EditingControlRowIndex // property. publicint EditingControlRowIndex { get { return rowIndex; } set { rowIndex = value; } } // Implements the IDataGridViewEditingControl.EditingControlWantsInputKey // method. publicbool 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: returntrue; default: returnfalse; } } // Implements the IDataGridViewEditingControl.PrepareEditingControlForEdit // method. publicvoid PrepareEditingControlForEdit(bool selectAll) { // No preparation needs to be done. } // Implements the IDataGridViewEditingControl // .RepositionEditingControlOnValueChange property. publicbool RepositionEditingControlOnValueChange { get { returnfalse; } } // Implements the IDataGridViewEditingControl // .EditingControlDataGridView property. public DataGridView EditingControlDataGridView { get { return dataGridView; } set { dataGridView = value; } } // Implements the IDataGridViewEditingControl // .EditingControlValueChanged property. publicbool EditingControlValueChanged { get { return valueChanged; } set { valueChanged = value; } } // Implements the IDataGridViewEditingControl // .EditingPanelCursor property. public Cursor EditingPanelCursor { get { returnbase.Cursor; } } protectedoverridevoid OnValueChanged(EventArgs eventargs) { // Notify the DataGridView that the contents of the cell // have changed. valueChanged =true; this.EditingControlDataGridView.NotifyCurrentCellDirty(true); base.OnValueChanged(eventargs); } }}
MDataGridViewCalendarColumn mdc = new MDataGridViewCalendarColumn();DataGridView dgv = new DataGridView();dgv.Columns.Add(mdc);