DataGridView-添加一列为时间,加入时间控件Calender

来源:互联网 发布:证券交易软件哪个好 编辑:程序博客网 时间:2024/05/23 16:36

 

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

 

namespace DataGridView时间列

{

   public partial class Form1 : Form

    {

       public Form1()

       {

           InitializeComponent();

       }

       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 cellused for the template is a CalendarCell.

                    if (value != null&&

                       !value.GetType().IsAssignableFrom(typeof(CalendarCell)))

                    {

                        throw newInvalidCastException("Must be a CalendarCell");

                    }

                    base.CellTemplate = value;

                }

           }

 

           private void InitializeComponent()

           {

 

           }

       }

 

       public class CalendarCell : DataGridViewTextBoxCell

       {

           public CalendarCell()

                : base()

           {

                // Use the short date format.

                this.Style.Format="yyyy-MM-dd";

           }

 

           public override void InitializeEditingControl(int rowIndex, object

                initialFormattedValue,DataGridViewCellStyle dataGridViewCellStyle)

           {

                // Set the value of the editingcontrol to the current cell value.

               base.InitializeEditingControl(rowIndex, initialFormattedValue,

                    dataGridViewCellStyle);

                CalendarEditingControl ctl =

                    DataGridView.EditingControlas CalendarEditingControl;

                ctl.Value =(DateTime)this.Value;//此处存在类型强制转换的可能,根据实际情况改造。

 

                ctl.Format =DateTimePickerFormat.Custom;

                ctl.CustomFormat =dataGridViewCellStyle.Format;

                ctl.ShowUpDown =((CalendarColumn)this.OwningColumn).ShowUpDown;//此处去掉就是canlender

           }

 

           public override Type EditType

           {

                get

                {

                    // Return the type of theediting contol that CalendarCell uses.

                    returntypeof(CalendarEditingControl);

                }

           }

 

           public override Type ValueType

           {

                get

                {

                    // Return the type of thevalue that CalendarCell contains.

                    return typeof(DateTime);

                }

           }

 

           public override object DefaultNewRowValue

           {

                get

                {

                    // Use the current date andtime as the default value.

                    return DateTime.Now;

                }

           }

       }

 

       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

                {

                    returnthis.Value.ToLongDateString();

                }

                set

                {

                    String newValue = value asString;

                    if (newValue != null)

                    {

                        this.Value =DateTime.Parse(newValue);

                    }

                }

           }

 

           // Implements the

           // IDataGridViewEditingControl.GetEditingControlFormattedValue method.

           public object GetEditingControlFormattedValue(

                DataGridViewDataErrorContextscontext)

           {

                returnEditingControlFormattedValue;

           }

 

           // Implements the

           // IDataGridViewEditingControl.ApplyCellStyleToEditingControl method.

           public void ApplyCellStyleToEditingControl(

                DataGridViewCellStyledataGridViewCellStyle)

           {

                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 theIDataGridViewEditingControl.EditingControlWantsInputKey

            // method.

           public bool EditingControlWantsInputKey(

                Keys key, booldataGridViewWantsInputKey)

           {

                // Let the DateTimePickerhandle 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 theIDataGridViewEditingControl.PrepareEditingControlForEdit

           // method.

           public void PrepareEditingControlForEdit(bool selectAll)

           {

                // No preparation needs to bedone.

           }

 

           // 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 thatthe contents of the cell

                // have changed.

                valueChanged = true;

               this.EditingControlDataGridView.NotifyCurrentCellDirty(true);

                base.OnValueChanged(eventargs);

           }

       }

    }

}

以上编译通过后,在前天DataGridView的编辑列里面,选择列类型ColmnType多了一种类型CalendarColumn,选择后运行。

参考