自定义DataGridView日期型列

自定义DataGridView日期型列,MSDN说明如下:

using System;
using System.Windows.Forms;

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

public class Form1 : Form
{
  private DataGridView dataGridView1 = new DataGridView();

  [STAThreadAttribute()]
  public static void Main()
  {
    Application.Run(new Form1());
  }

  public Form1()
  {
    this.dataGridView1.Dock = DockStyle.Fill;
    this.Controls.Add(this.dataGridView1);
    this.Load += new EventHandler(Form1_Load);
    this.Text = "DataGridView calendar column demo";
  }

  private void Form1_Load(object sender, EventArgs e)
  {
    CalendarColumn col = new CalendarColumn();
    this.dataGridView1.Columns.Add(col);
    this.dataGridView1.RowCount = 5;
    foreach (DataGridViewRow row in this.dataGridView1.Rows)
    {
        row.Cells[0].Value = DateTime.Now;
    }
  }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值