datagirdview日期列

本文介绍了一种在DataGridView中自定义添加DateTimePicker控件作为日期列的方法。通过创建CalendarColumn和CalendarCell类,并实现特定的功能,如日期格式化、编辑控制初始化等,使得在DataGridView中显示和编辑日期变得更加灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


/// <summary> 
/// DataGridView自定义添加DateTimePicker控件日期列
/// </summary> 
 public class CalendarColumn : DataGridViewColumn 

     /// <summary> 
     ///  
     /// </summary> 
     public CalendarColumn() 
         : base(new CalendarCell()) 
     { 
     } 
    /// <summary> 
     ///  
     /// </summary> 
     public override DataGridViewCell CellTemplate 
    { 
         get 
        { 
             return base.CellTemplate; 
         } 
         set 
         { 
           
             if (value != null && 
                 !value.GetType().IsAssignableFrom(typeof(CalendarCell))) 
            { 
                 throw new InvalidCastException("Must be a CalendarCell"); 
            } 
             base.CellTemplate = value; 
         } 
     } 
 } 
 /// <summary> 
 /// DataGridView 添加日期列 
 /// </summary> 
 public class CalendarCell : DataGridViewTextBoxCell 
 { 
 
     public CalendarCell() 
         : base() 
     { 
     
         this.Style.Format = "d"; 
     } 
 
     public override void InitializeEditingControl(int rowIndex, object 
         initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) 
    { 
 
         base.InitializeEditingControl(rowIndex, initialFormattedValue, 
             dataGridViewCellStyle); 
         CalendarEditingControl ctl = 
             DataGridView.EditingControl as CalendarEditingControl; 
    
         if (this.Value == null) 
        { 
             ctl.Value = (DateTime)this.DefaultNewRowValue; 
         } 
        else 
         { 
             ctl.Value = (DateTime)this.Value; 
         } 
     } 
 
     public override Type EditType 
     { 
         get 
         { 
           
             return typeof(CalendarEditingControl); 
         } 
     } 
 
     public override Type ValueType 
     { 
         get 
         { 
            
 
             return typeof(DateTime); 
         } 
     } 
 
     public override object DefaultNewRowValue 
     { 
         get 
         { 
          
             return DateTime.Now; 
         } 
     } 
 } 
 /// <summary> 
 ///DataGridView 添加日期列
 /// </summary> 
 class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl 
 { 
     DataGridView dataGridView; 
     private bool valueChanged = false; 
     int rowIndex; 
 
     public CalendarEditingControl() 
     { 
         this.Format = DateTimePickerFormat.Short; 
     } 
 
 
     public object EditingControlFormattedValue 
     { 
         get 
         { 
             return this.Value.ToShortDateString(); 
         } 
         set 
         { 
             if (value is String) 
             { 
                 try 
                 { 
 
                     this.Value = DateTime.Parse((String)value); 
                 } 
                 catch 
                 { 
            
                     this.Value = DateTime.Now; 
                 } 
             } 
         } 
     } 
 
 
     public object GetEditingControlFormattedValue( 
         DataGridViewDataErrorContexts context) 
     { 
         return EditingControlFormattedValue; 
     } 
 
 
     public void ApplyCellStyleToEditingControl( 
         DataGridViewCellStyle dataGridViewCellStyle) 
     { 
         this.Font = dataGridViewCellStyle.Font; 
         this.CalendarForeColor = dataGridViewCellStyle.ForeColor; 
         this.CalendarMonthBackground = dataGridViewCellStyle.BackColor; 
     } 
 
 
     public int EditingControlRowIndex 
     { 
         get 
         { 
             return rowIndex; 
         } 
         set 
         { 
             rowIndex = value; 
         } 
     } 
 
 
     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 !dataGridViewWantsInputKey; 
         } 
     } 
 
 
     public void PrepareEditingControlForEdit(bool selectAll) 
     { 
         // No preparation needs to be done. 
     } 
 
 
     public bool RepositionEditingControlOnValueChange 
     { 
         get 
         { 
            return false; 
         } 
     } 
 
 
     public DataGridView EditingControlDataGridView 
     { 
         get 
         { 
             return dataGridView; 
         } 
         set 
         { 
             dataGridView = value; 
         } 
     } 
 
 
     public bool EditingControlValueChanged 
     { 
         get 
         { 
             return valueChanged; 
         } 
         set 
         { 
             valueChanged = value; 
         } 
     } 
 
 
     public Cursor EditingPanelCursor 
     { 
         get 
         { 
             return base.Cursor; 
         } 
     } 
 
     protected override void OnValueChanged(EventArgs eventargs) 
     { 
 
         valueChanged = true; 
         this.EditingControlDataGridView.NotifyCurrentCellDirty(true); 
         base.OnValueChanged(eventargs); 
     } 
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值