2009-06-09 2 views
2

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

ответ

1

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

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

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

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

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

2

Фактически, как выпадающее время, так и его инициализаторы реализованы как частные члены данных класса 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);    
    } 
} 

Надеется, что это помогает

+0

Эй, спасибо, это «почти» сработало. Есть только небольшой сбой, который отображает часы, такие как: 00-15-30-45-40 Я не знаю, откуда это 40, я попытаюсь выяснить: – 2009-06-10 13:43:54

+0

, и это не так сохранить выбранное значение. Трудно переопределить класс, когда у вас нет доступа к источникам! : P – 2009-06-10 13:47:17

+0

Линия «this.SelectedDate.Minute» всегда дает текущее время ... странное. – 2009-06-10 14:04:44

2

Перейти к

[12] \ ШАБЛОН \ LAYOUTS \ 1033 \ BFORM.JS

В строке: 7690

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

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

1

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

DateTimeControlName.SelectedDate.Hour 

&

DateTimeControlName.SelectedDate.Minute. 

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

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

Смежные вопросы