Форматирование даты и времени в столбце 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;
            }
        }
    }
}
Другие вопросы по тегам