DataGridView添加DateTimePicker

来源:互联网 发布:linux内核论坛 编辑:程序博客网 时间:2024/05/20 18:03
public class CalendarColumn : DataGridViewColumn
    
{
        
public CalendarColumn()
            : 
base(new CalendarCell())
        
{
        }

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

        }

    }


    
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;
            ctl.Value 
= Convert.ToDateTime(this.Value.ToString());
        }


        
public override Type EditType
        
{
            
get
            
{
                
return typeof(CalendarEditingControl);
            }

        }


        
public override Type ValueType
        
{
            
get
            
{
                
return typeof(DateTime);
            }

        }


        
public override object DefaultNewRowValue
        
{
            
get
            
{
                DateTime a 
= Convert.ToDateTime("00:00:00");
                
return a;
            }

        }

    }


    
class CalendarEditingControl : DateTimePicker, IDataGridViewEditingControl
    
{

        DataGridView dataGridView;
        
private bool valueChanged = false;
        
int rowIndex;

        
public CalendarEditingControl()
        
{
//            this.Format = DateTimePickerFormat.Time;
            this.Format = DateTimePickerFormat.Custom;
            
this.CustomFormat = "HH:mm";

            
            
this.ShowUpDown = true;
        }



        
public object EditingControlFormattedValue
        
{
            
get
            
{
               
                
return this.Value.ToLongTimeString();
            }

            
set
            
{
                String newValue 
= value as String;

                
if (newValue != null)
                
{

                    
this.Value = Convert.ToDateTime(newValue);
                }

            }

        }



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

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

        }



        
public void PrepareEditingControlForEdit(bool selectAll)
        
{

        }



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

    }

 
原创粉丝点击