我正在尝试使用 this MSDN example on How to host controls in DataGridViewCells. 中的DateTime选择器自定义gridview列类型我想以24小时格式显示小时和分钟,没有秒或AM PM指示符。
我已将EditingControlFormattedValue设置为" HH:mm",如果没有实际编辑,则会正确显示该值。
编辑时,如果在CalendarEditingControl的构造函数中,我将编辑控件设置为CustomFormat =" HH:mm",则控件显示星期几和月份。 (!?)
当我改为使用Format = DateTimePickerFormat.Time时,控件在编辑时显示AM或PM。
如何说服此控件只显示我关心的DateTime值的部分? (C#,VS 2008)
答案 0 :(得分:3)
您需要进行一些调整才能使链接代码按照您想要的方式运行:
注释掉CalendarCell()构造函数中的硬编码行(this.Style.Format = "d";
)
告诉CalendarEditingControl使用您自定义指定的格式:
在设计器中,设置所需的格式(EditColumns-> DefaultCellStyle-> Format)
public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
{
this.Format = DateTimePickerFormat.Custom;
this.CustomFormat = dataGridViewCellStyle.Format;
// ... other stuff
}
答案 1 :(得分:1)
我发现我需要进行以下更改:
在CalendarCell的构造函数中,将格式更改为24小时。
public CalendarCell()
: base()
{
// Use the 24hr format.
//this.Style.Format = "d";
this.Style.Format = "HH:mm";
}
在编辑控件的构造函数中指定使用自定义格式。我也冒昧地设置ShowUpDown
为true,因此在编辑单元格时不显示日历图标:
public CalendarEditingControl()
{
//this.Format = DateTimePickerFormat.Short;
this.Format = DateTimePickerFormat.Custom;
this.CustomFormat = "HH:mm";
this.ShowUpDown = true;
}
更改EditingControlFormattedValue。这看起来并不是必要的,但是按原样离开感觉很蠢。
// Implements the IDataGridViewEditingControl.EditingControlFormattedValue
// property.
public object EditingControlFormattedValue
{
get
{
//return this.Value.ToShortDateString();
return this.Value.ToString("HH:mm");
}
set
{
if (value is String)
{
try
{
// This will throw an exception of the string is
// null, empty, or not in the format of a date.
this.Value = DateTime.Parse((String)value);
}
catch
{
// In the case of an exception, just use the
// default value so we're not left with a null
// value.
this.Value = DateTime.Now;
}
}
}
}