2008-11-14 51 views
8

我试图隐藏列表中的“标题”字段。 这似乎并不工作: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 

我在做什么错?

回答

12

试试这个:

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

这很尴尬。这正是我需要的。我仍然不明白'ShowInEditForm`属性是什么,但至少我可以继续...谢谢(我的辩护,我没有整周睡觉 - 在房子里的新生儿)。 – vitule 2008-11-14 15:37:32

0

确保您抓取了一个新的 SPWeb实例。

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

不是这样。虽然谢谢! – vitule 2008-11-14 15:11:19

0

我相信列表中字段的可见性是由用户“获取”的默认视图控制的。你不想修改视图吗?我知道你可以获得列表的视图,以及默认视图。

我只是吐泥包在这里...

+0

我主要关心的是从新窗体和编辑窗体中删除“标题”字段。 – vitule 2008-11-14 15:31:21

0

有当您使用隐藏属性,你付出的代价。

已经发现设置一个隐藏的列将删除通过代码删除它的能力。

0

尝试这一个这将工作... 标题字段被命名为LinkTitle ... 其他字段可以隐藏在相同的方式。

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

上面的解决方案是为了在任何地方隐藏字段。它也将隐藏在列表的列概览中。

如果您只想隐藏特定列表中的字段。或者,如果您仍然通过使用列表设置页面操作字段(设置回可见)。您需要在列表的“FieldLinks”属性中设置字段的“隐藏”属性。

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

以上都没有设置Hidden true的例子,除非CanToggleHidden的值为true。问题是,CanToggleHidden只有一个Get,而不是Set,所以你必须使用反射来执行一个激进的“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. 
} 
相关问题