• 怎么在DataGridView中动态添加DateTimePicker列?


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

  • 相关阅读:
    Java bytesToHexString 解析
    Redis 启动警告错误解决
    Jackson
    HttpClient和HttpURLConnection的区别
    (HttpURLConnection)强制转化
    由sqlite在手机上的存储位置,引发的onCreate在哪里执行的小结
    Android数据存储五种方式总结
    Android 操作SQLite基本用法
    Android中SQLite应用详解
    android基础
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/2279483.html
Copyright © 2020-2023  润新知