我现在有1列是时间类型我想让这一列的cell都变成时间控件可不可以,应该怎么实现。。

解决方案 »

  1.   

    需自己写个DataGridViewColumn
    参考代码:
     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);
            }
        }
      

  2.   

    自己写个控件,前面是textbox后面是按钮 出发时间控件 选完后textbox显示 选定时间
    然后在绘制单元格事件的时候将控件覆盖到该列再就是重写一个datagridview的列
      

  3.   

    http://www.cnblogs.com/CodeAnyWhere/archive/2005/12/17/298879.aspx
    這個裡面就有你想要的,我個人覺得還不錯!你試試看!
      

  4.   

    对列的数据类型做判断:
    if(dataGridView1.Columns[i].ValueType == typeof(DateTime))
    {
       //该列所有单元格配置成时间控件
    }