DateTimeControl в Sharepoint (c #)

2

Я пытаюсь изменить значения по умолчанию в раскрывающемся списке "время", который отображает DateTimeControl в Sharepoint. Я хочу прирост в 15, а не 5 минут. Кто-нибудь знает, как это можно сделать? Могу ли я перегрузить метод или что-то еще?

Теги:
sharepoint

4 ответа

2

Перейдите к

[12]\TEMPLATE\РАСКЛАДКИ\1033\BFORM.JS

В строке: 7690

Изменить:               this.dminControl = 5; в               this.dminControl = 15;

Он работает, но все DateTimePickers будут иметь прирост до 15 минут

2

По сути, как время, так и его инициализаторы реализованы как частные члены данных класса DateTimeControl, поэтому вы не можете напрямую изменять значения. Тем не менее, минутный снимок подготовлен внутри OnPreRender, мы можем косвенно получить контроль и reset его значения, чтобы получить желаемое поведение. Вот один из подходов

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);            
    }
}

Надеюсь, что это поможет

  • 0
    Эй, спасибо, это "почти" сработало. Есть только небольшой глюк, который отображает часы вроде: 00-15-30-45-40 Я не знаю, откуда эти 40, я попытаюсь выяснить :)
  • 0
    и он не сохраняет выбранное значение. Трудно переопределить класс, когда у вас нет доступа к источникам! :П
Показать ещё 5 комментариев
1

Вы можете получить значение выбранного Часа и Минуты из SharePoint:DateTimeControl в С# с помощью следующего кода:

DateTimeControlName.SelectedDate.Hour 

&

DateTimeControlName.SelectedDate.Minute. 

Эти инструкции возвращают час и минуту в формате Integer.

Я знаю, что этот пост довольно старый. Но я просто подумал, что это может помочь кому-то прийти на этот пост.

1

К сожалению, это невозможно с использованием поля даты Datetime.

Поле SharePoint состоит из двух основных частей. Структура данных (в коде) и различные представления (а именно в списке, new/edit/view, admin [при добавлении в список]). Структура данных из коробки является стандартным полем .NET DateTime. К сожалению, представления дают только прирост на 5 минут.

Вы можете создать свой собственный, наследуя от поля по умолчанию. MSDN имеет достойное объяснение того, как. Ник Севенс имеет более четкое объяснение.

К сожалению (как и в большинстве настроек SharePoint) создание собственного поля в CAML может быть сложным.

Этот проект в CodePlex может быть хорошей отправной точкой. Он лицензирован под GPL, поэтому вы можете его изменить.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню