2010-08-05 3 views
0

Я хочу изменить свойство «Обязательный» для поля списка, связанного с типом содержимого. Я изменил тип содержимого и схему списка, но значение «Обязательный» по-прежнему установлено в true, я хочу, чтобы оно было необязательным.Как программно обновить тип контента?

Любая идея?

Thanx

ответ

2

Попробуйте так:

private void SetFieldRequired(SPList list, string field, string contentType, bool required) 
{ 
    SPField fieldInList = list.Fields[field]; 
    fieldInList.Required = required;   
    fieldInList.Update(); 

    SPField fieldInContentType = list.ContentTypes[contentType].Fields[field]; 
    fieldInContentType.Required = required; 
    fieldInContentType.Update(); 
} 

Не забудьте добавить обработку исключений.

+2

Спасибо, я изменил код немного, и это, кажется, работает отлично! метод обновления() должен быть вызван на содержание типа не поле. SPField fieldInContentType = list.ContentTypes [CONTENTTYPE] .Fields.GetFieldByInternalName (поле); ПолеInContentType.Required = false; list.ContentTypes [contentType] .Update(); –

+0

Извините за ошибку , Я не тестировал этот код. :-) –

1

Если вы создали свой список и тип содержимого программно (с помощью XML-файлы), есть несколько мест, где вам нужно, чтобы сделать изменения:

  1. В вашем ContentType.CT.Columns .xml (установите атрибут Required = "FALSE" в XML вашего элемента Field).
  2. В вашем ContentType.CT.xml (установите атрибут Required = "FALSE" в XML вашего элемента FieldRef)
  3. В файле schema.xml вашего списка, если раздел, найдите свое поле и установите атрибут к ложному.

Возможно, вы правильно это сделали. Однако schema.xml списка используется только тогда, когда создается список. Поэтому, если вы изменили schema.xml и развернули его, но без удаления и повторного создания списка ваши изменения будут бесполезны.

EDIT:

Если вы не можете удалить и заново создать свой список, вам придется писать код, который будет делать это программно (с помощью функции или эквивалент). Это будет делать трюк:

using (SPSite site = new SPSite("http://yoursite")) 
    { 
     using (SPWeb web = site.RootWeb) 
     { 
      SPList list = web.Lists.TryGetList("Your List"); 
      if (list != null) 
      { 
       SPField fld = list.Fields[SPBuiltInFieldId.RequiredField]; 
       fld.Required = false; 
       fld.Update(); 
      } 
     } 
    } 
+0

Спасибо за ваш ответ ... но мы уже сделали «трюк» в FeatureReceiver списка в методе FeatureActivated точно, но при добавлении или редактировании элемента списка это поле по-прежнему требуется :-( –

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