3

我正在尝试使用此 MSDN 示例中关于如何在 DataGridViewCells 中托管控件的 DateTime 选择器自定义 gridview 列类型。我想以 24 小时格式显示小时和分钟,没有秒或 AM PM 指示器。

我已将 EditingControlFormattedValue 设置为“HH:mm”,并且在未实际编辑时正确显示该值。

编辑时,如果在 CalendarEditingControl 的构造函数中将编辑控件设置为 CustomFormat = "HH:mm",则控件显示星期和月份。(!?)

当我改为使用 Format = DateTimePickerFormat.Time 时,控件在编辑时显示 AM 或 PM。

如何说服此控件仅显示我关心的 DateTime 值的部分?(C#,VS 2008)

4

2 回答 2

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
    }
    
于 2012-05-14T20:04:06.423 回答
1

我发现我需要进行以下更改:

在 CalendarCell 的构造函数中,将格式更改为 24 小时制。

public CalendarCell()
    : base()
{
    // Use the 24hr format.
     //this.Style.Format = "d";
     this.Style.Format = "HH:mm";
}

在编辑控件的构造函数中指定使用自定义格式。我还冒昧地设置了ShowUpDowntrue 以便在编辑单元格时不显示日历图标:

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;
            }
        }
    }
}
于 2012-05-14T20:20:42.387 回答