zoukankan      html  css  js  c++  java
  • Winfrom学习(六)--dataGridView中增加时间控件

    参考链接:https://blog.csdn.net/qiume/article/details/6646506

    1、添加类

     //日期列
        public class CalendarColumn : DataGridViewColumn
        {
            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;
                }
            }
    
            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;
                    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);
                }
    
            }
        }

    2、使用时添加列

    //添加事件列
                    CalendarColumn col = new CalendarColumn();
                    col.HeaderText = "预计归还时间";
                    col.DefaultCellStyle.Format = "yyyy-MM-dd";
                    col.FillWeight = 15;
                    dataGridView1.Columns.Add(col);
  • 相关阅读:
    day84
    模型层之单表操作
    Django的模板层
    Django框架导读
    创建Django项目
    名称空间2.0path
    js基础之BOM和DOM
    LG5003 跳舞的线
    20191003 「HZOJ NOIP2019 Round #8」20191003模拟
    LG3092 「USACO2013NOV」No Change 状压DP
  • 原文地址:https://www.cnblogs.com/webttt/p/14863591.html
Copyright © 2011-2022 走看看