SharePoint: сделайте поле списка скрытым программно

Я пытаюсь скрыть поле "Название" в списке. Это, кажется, не работает:

SPList myList;
...
SPField titleField = myList.Fields.GetField("Title");
//titleField.PushChangesToLists = true; <-- doesn't seem to make a difference
titleField.ShowInEditForm = false;
titleField.ShowInDisplayForm = false;
titleField.ShowInNewForm = false;
titleField.Update();
//myList.Update(); <-- make no difference

что я делаю не так?

7 ответов


попробуйте это:

field.Hidden = true;
field.Update();

ни один из приведенных выше примеров установки скрытого true не будет работать, если CanToggleHidden не имеет значения true. Проблема в том, что CanToggleHidden имеет только Get, а не набор, поэтому вам нужно выполнить радикальный "трюк гимнастики программирования SharePoint", используя отражение, чтобы сначала перевернуть CanToggleHidden от false до true. После этого вы можете изменить Hidden на true (или обратно на false). Есть много примеров в интернете (хотя не все из них правильно написал). При необходимости, Вероятно, я могу выкопать пример PowerShell, который работает.

if(field.CanToggleHidden) {
   field.Hidden = false;
}
else
{
   // display an error message or write to your favorite logging location
   // explaining that there is no hope of changing the value of Hidden until
   // CanToggleHidden changes to TRUE first.
}

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

using (SPSite site = new SPSite(webUrl))
{
    using (SPWeb web = site.OpenWeb())
    {
        try
        {
            //... Get SPList ...
        }
    }
}

Я считаю, что видимость полей в списках контролируется представлением по умолчанию, которое пользователь "получает". Разве вы не хотите изменить мнение? Я знаю, что вы можете получить представления для списка, а также представление по умолчанию.

Я просто размышляю...


существует цена, которую вы платите, когда используете скрытую собственность.

было обнаружено, что установка скрытого столбца удалит возможность его удаления с помощью кода.


попробуйте это это будет работать... Поле "Заголовок" называется LinkTitle... другие поля могут быть скрыты таким же образом.

SPView view = list.DefaultView;    
if(view.ViewFields.Exists("LinkTitle")) 
{    
   view.ViewFields.Delete("LinkTitle");    
   view.Update();    
}

решение выше для скрытия поля везде. Он также будет скрыт в колонке обзор вашего списка.

Если вы хотите скрыть поле в отдельном списке. Или если вы все еще манипулируете полем (установите обратно в видимое), используя страницу настроек списка. Вам нужно установить свойство "Hidden "поля в свойстве" FieldLinks " списка.

myList.FieldLinks["SomeField"].Hidden = true;