实现在DataGridView的编辑列里面选择列类型ColmnType时,多一种类型CalendarColumn从而增加时间控件...

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)))
                {

                    throw new InvalidCastException("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 editing control to the current cell value.

            base.InitializeEditingControl(rowIndex, initialFormattedValue,dataGridViewCellStyle);

            CalendarEditingControl ctl =DataGridView.EditingControl as 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 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.ShowUpDown = base.ShowUpDown;

        }

        public object EditingControlFormattedValue
        {

            get
            {

                return this.Value.ToLongDateString();

            }

            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);

        }

    }

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

转载于:https://www.cnblogs.com/richzhang/archive/2013/06/08/3127002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值