如何在Datagridview里面加Calendar控件
2009-09-15 09:52
375 查看
datagridviewl里面可以添加的列有6种,没有日期型的,于是我查找了些资料,找到个添加日期控件的方法。首先建立三个类:CalendarEditingControl,CalendarColumn,CalendarCell继承已有的类,具体代码如下:
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)
{
this.Value = DateTime.Parse((String)value);
}
}
}
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)
{
// 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);
}
}
第二个类:
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 = (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;
}
}
}
建立后就可以用 CalendarColumn直接声明日期列的对象了,进而可以添加到datagridview里面。
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)
{
this.Value = DateTime.Parse((String)value);
}
}
}
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)
{
// 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);
}
}
第二个类:
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 = (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;
}
}
}
建立后就可以用 CalendarColumn直接声明日期列的对象了,进而可以添加到datagridview里面。
相关文章推荐
- 实现在DataGridView的编辑列里面选择列类型ColmnType时,多一种类型CalendarColumn从而增加时间控件
- android EditText控件如何禁止往里面输入内容?
- ASPNET-控件-Calendar-如何:在 Calendar 控件中显示数据库中的选定日期
- 如何:禁用 Windows 窗体 DataGridView 控件的按钮列中的按钮
- 如何在Viewmodel里面定义控件属性
- 在tableviewcell里面嵌入switch控件以及如何获取switch控件数据
- 如何于DataGridView控件中以跨数据行方式显示数据
- 在winfrom中,如何将数据库的数据显示在datagridview控件上。
- Visual Basic 2005——如何在DataGridView控件的数据列标题上绘制编号
- C# 如何:禁用 Windows 窗体 DataGridView 控件的按钮列中的按钮 Enable = false
- 如何把其他项目中编写好的 自定义控件 放到自己的项目里面使用 (Multi-ListBox ASP.NET控件)
- 如何清空IE下file文件控件表单里面的值
- 如何在C#中利用DataGridView控件编辑数据
- [VB.NET]如何捕捉datagridview控件中combox内容改变的事件?
- 如何在winform DataGridView控件的DataGridViewButtonColumn按钮列中禁用按钮
- 当窗体最大化后,如何让窗体里面的控件也随之改变大小和位置
- C#中,datagridview与sql数据源绑定后,通过控件更改数据如何自动回写更新到数据源
- GridView里面的内嵌的服务器控件如LinkButton如何传值?
- 如何在BCGControlBar工程的工具栏里面新增下拉列表控件
- 如何于DataGridView控件中以跨数据行方式显示数据