Форматирование даты и времени в столбце datagridview
Я пытаюсь использовать настраиваемый тип столбца Выбор сетки DateTime из этого примера MSDN на Как разместить элементы управления в DataGridViewCells. Я хочу отображать часы и минуты в 24-часовом формате, без секунд или индикаторов AM PM.
Я установил EditingControlFormattedValue в значение "ЧЧ: мм", и когда редактирование не выполняется, значение отображается правильно.
При редактировании, если в конструкторе CalendarEditingControl я установил элемент управления для редактирования CustomFormat = "ЧЧ: мм", элемент управления отображает день недели и месяц. (!?)
Когда я вместо этого использую Format = DateTimePickerFormat.Time, элемент управления показывает AM или PM при редактировании.
Как я могу убедить этот элемент управления отображать только те части значения DateTime, которые мне нужны? (C#, VS 2008)
2 ответа
Есть несколько настроек, которые необходимо выполнить для связанного кода, чтобы он работал так, как вы хотите:
Закомментируйте жестко запрограммированную строку в конструкторе CalendarCell() (
this.Style.Format = "d";
)Скажите CalendarEditingControl использовать ваш пользовательский формат:
В конструкторе установите нужный формат (EditColumns->DefaultCellStyle->Format)
public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle) { this.Format = DateTimePickerFormat.Custom; this.CustomFormat = dataGridViewCellStyle.Format; // ... other stuff }
Я обнаружил, что мне нужно внести следующие изменения:
В конструкторе 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;
}
}
}
}