• 实现在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,选择后运行。

  • 相关阅读:
    hdu 1018
    hdu 1005
    hdu 1222
    hdu 1297
    hdu 1568
    WCF入门, 到创建一个简单的WCF应用程序
    BarTender 通过ZPL命令操作打印机打印条码, 操作RFID标签
    WCF入门的了解准备工作
    C# Bartender模板打印 条码,二维码, 文字, 及操作RFID标签等。
    Qt configure脚本说明
  • 原文地址:https://www.cnblogs.com/richzhang/p/3127002.html
Copyright © 2020-2023  润新知