Как стать автором
Обновить

Комментарии 3

Это, к сожалению, farm-wide решение. А какой самый простой способ поменять контрол в отдельно взятом списке?
Самое простое, наверное, это поменять в дизайнере во всех формах контролы на текстовые поля (можно в представлении «конструктор» для FormField выбрать «Форматировать как: Текстовое поле»):

<SharePoint:FormField runat="server" id="ff2{$Pos}" ControlMode="New" FieldName="datetime" __designer:bind="{ddwrt:DataBind('i',concat('ff2',$Pos),'Value','ValueChanged','ID', ddwrt:EscapeDelims(string(@ID)),'@datetime')}" />

<asp:TextBox runat="server" id="ff2{$Pos}" __designer:bind="{ddwrt:DataBind('i',concat('ff2',$Pos),'Text','TextChanged','ID', ddwrt:EscapeDelims(string(@ID)),'@datetime')}" />

и повесить кастомный датапикер.
Данный способ кастомизирует форму и подходит для этапа внедрения. Если поля будут добавляться во время эксплуатации, то придется на каждое такое добавление открывать дизайнер. Но это не отменяет применимости Вашего способа для «статичных» форм.

Хотелось бы иметь решение «из коробки». Развернул фичу и забыл, а понадобилось — настроил.
Можно кастомизировать решение топика с использованием параметров сайта. Как грубый пример:

var propertyValue = SPContext.Current.Site.RootWeb.AllProperties["DateTimeDisplayKey"] as string;
if (_minuteDropDownList != null &&
    !DateOnly && 
    !string.IsNullOrEmpty(propertyValue) && 
    propertyValue.Contains(SPContext.Current.ListItem.ContentTypeId.ToString()))
{
    _minuteDropDownList.DataSource = _minutes;// массив отображаемых минут.
    _minuteDropDownList.DataBind();
    _minuteDropDownList.SelectedIndex = SelectedDate.Minute;
}
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации