C# Sharepoint中的DateTimeControl(c)

C# Sharepoint中的DateTimeControl(c),c#,.net,sharepoint,C#,.net,Sharepoint,我正在尝试更改Sharepoint中DateTimeControl显示的时间下拉列表中的默认值。我希望增加15分钟,而不是5分钟。有人知道怎么做吗?是否可以重载方法或其他内容?不幸的是,使用开箱即用的DateTime字段无法实现这一点 SharePoint字段由两个主要部分组成。代码中的数据结构和各种视图,即列表、新建/编辑/视图、管理[添加到列表时]。开箱即用的数据结构是一个标准的.NET日期时间字段。不幸的是,视图只提供了5分钟的增量 您可以通过从默认字段继承来创建自己的字段。有一个像样的解

我正在尝试更改Sharepoint中DateTimeControl显示的时间下拉列表中的默认值。我希望增加15分钟,而不是5分钟。有人知道怎么做吗?是否可以重载方法或其他内容?

不幸的是,使用开箱即用的DateTime字段无法实现这一点

SharePoint字段由两个主要部分组成。代码中的数据结构和各种视图,即列表、新建/编辑/视图、管理[添加到列表时]。开箱即用的数据结构是一个标准的.NET日期时间字段。不幸的是,视图只提供了5分钟的增量

您可以通过从默认字段继承来创建自己的字段。有一个像样的解释如何。有更清楚的解释

不幸的是,与大多数SharePoint自定义一样,在CAML中创建自己的字段可能很棘手


这可能是一个很好的起点。它是根据GPL授权的,因此您可以修改它。

事实上,时间下拉列表及其初始值设定项都是作为DateTimeControl类的私有数据成员实现的,因此您不能直接更改值。但是,分钟下拉列表是在OnPreRender内部准备的,我们可以获取控件并间接重置其值以获得所需的行为。这里有一种方法

public class MyDateTimeControl : DateTimeControl
{
    protected override void Render(HtmlTextWriter output)
    {
        DropDownList minuteControl = null;
        string[] newMinutesRange = new string[] { "00", "15", "30", "45" };
        string[] newMinutesRangeExt = new string[] { "00", "15", "30", "45", "" };
        int index = 0;
        int selectedMinutes;

        try
        {
            if (!this.DateOnly && this.Controls.Count == 4)
            {
                minuteControl = (DropDownList)this.Controls[2];
            }
        }
        catch { }

        if (minuteControl != null && !this.DateOnly)
        {
            selectedMinutes = Convert.ToInt32(minuteControl.SelectedValue);
            if (selectedMinutes % 15 > 0)
            {
                index = 4;
                newMinutesRangeExt.SetValue(selectedMinutes.ToString(), index);
                newMinutesRange = newMinutesRangeExt;
            }
            else
            {
                index = selectedMinutes / 15;
            }

            minuteControl.Items.Clear();
            minuteControl.SelectedIndex = 0;
            minuteControl.DataSource = newMinutesRange;
            minuteControl.DataBind();
            minuteControl.SelectedIndex = index;
        }

        base.Render(output);            
    }
}
希望这有助于转到

[12] \TEMPLATE\LAYOUTS\1033\BFORM.JS

排队:7690

更改: 这个.dminControl=5; 到 这个.dminControl=15


它可以工作,但所有的日期时间选择器都会增加到15分钟。您可以通过以下代码从C中的SharePoint:DateTimeControl获取所选小时和分钟的值:

DateTimeControlName.SelectedDate.Hour 
&

这些语句将以整数格式返回小时和分钟


我知道这个帖子很老了。但我只是觉得这可能会帮助一些人来到这篇文章。

嘿,谢谢,它几乎成功了。只是有一个小故障显示小时数,如:00-15-30-45-40我不知道这40是从哪里来的,我要试着找出:它没有保留选定的值。当您无法访问源代码时,很难重写类!:p this.SelectedDate.Minute行始终给出当前时间。。。奇怪。如果你没有从控件中选择日期,就会发生这种情况。如果你选择一个日期,它会给我一个错误。嗯:mistermuggles,40以这种方式显示只是为了设置DateTimeControl的默认行为,这有助于您使用当前分钟数,而不是固定分钟数。对于这个小问题,我已经编辑了上面的答案来处理状态。
DateTimeControlName.SelectedDate.Minute.