2009-05-19 3 views
0

Я пытаюсь создать пользовательский тип поля в SharePoint.Скрытие пользовательского поля типа SharePoint в режиме редактирования и создания

Этот элемент управления имеет его значение, основанное на другом поле в том же списке. Из-за этого требования это поле должно отображаться только в режиме отображения, а не в режиме редактирования или создания.

Как это обеспечить?

Если я просто закодировал элемент управления ASCX, чтобы не отображать поле, поле появится в этом режиме в режиме редактирования и создания.

alt text http://www.mannsoftware.com/blog/Lists/Photos/121308_0204_CrossSiteLo6.png

ответ

0

Настройка свойств ShowInEditForm и ShowInNewForm решила это для меня.

1

Как правило, вы устанавливаете свойство SPField.ReadOnlyField Истины для достижения желаемого поведения для любого поля. (Не забудьте SPField.Update соответственно!) Я считаю, что эквивалент CAML-атрибута для определений списков.

При этом в вашем классе управления, основанном на BaseFieldControl, вы можете просто переопределить метод RenderFieldForInput() и не вызывать базовую реализацию, чтобы гарантировать, что во время создания или редактирования ничего не отображается. Однако это все равно будет отображать строку таблицы поля в форме, которая, вероятно, не является тем, что вы хотите. Чтобы обеспечить требуемое поведение, используйте ReadOnlyField и переопределите Update() в вашем классе SPField (не для управления полем), чтобы всегда иметь значение True.

+0

Извините ... Не работает ... Или я делаю это неправильно? Это то, что я написал в классе SPField: public override void Update() { this.ReadOnlyField = true; base.Update(); } – ashwnacharya

+0

Попробуйте просто установить свойство во всех своих конструкторах, полностью игнорируя вызовы или переопределения Update(). (Не обязательно обновлять() в вашем конструкторе!) –

+0

Пробовал ... Нет .... Строка на странице редактирования все еще отображается; что еще хуже, он перестает обновлять значение поля. Значение не изменяется, когда я изменяю значение поля, которое оно ищет. – ashwnacharya

0

Это может быть проще просто изменить это на основе списка, по-списка, перейдя к Advanced секции List Settings, установка Allow management of content types? в Yes, а затем редактировать тип контента, чтобы изменить значение вашего поля к ' hidden '.

0

Пробовали ли вы и установить поле скрытым?

Пользовательские страницы FORMS для нового элемента и элемента редактирования (NewForm.aspx и EditForm.aspx) были бы другим способом достижения этого.

+0

Не будет ли это также скрывать поле в формах отображения, которое не требуется? Я могу только подчеркнуть ShowInEditForm и ShowInNewForm относительно OQ;) –