我自定义了“页面”文档库中显示的字段(显示的表格点击了网站操作 - >所有网站内容 - >页面)。
有人建议比我更了解sharepoint,我应该在激活功能时以编程方式从默认视图中删除我不想要的字段,所以我写了这样的代码感觉就像一个非常不优雅的解决方案,也是行不通的。
SPWeb web = properties.Feature.Parent as SPWeb;
if (web != null)
{
SPList list = web.Lists["Pages"] as SPList;
if (list != null)
{
foreach (SPField field in list.Fields)
{
if (field.Title != "Type" &&
field.Title != "Name" &&
field.Title != "Modified" &&
field.Title != "Checked Out To" &&
field.Title != "Page Layout")
{
if (list.DefaultView.ViewFields.Exists(field.InternalName))
{
list.DefaultView.ViewFields.Delete(field);
}
}
}
list.DefaultView.Update();
}
}
}
代码在激活功能时确定执行,所以我显然做错了。我已经搜索了这个解决方案,所以如果我在谷歌或这个网站遗漏了一些非常明显的事情,我会道歉。
答案 0 :(得分:2)
这是因为对list.DefaultView.ViewFields的更改超出了范围。在到达Update()调用之前,正在从数据库刷新集合。 尝试:
if (list != null)
{
SPView view = list.DefaultView;
foreach (SPField field in list.Fields)
{
if (field.Title != "Type" &&
...
field.Title != "Page Layout")
{
if (view.ViewFields.Exists(field.InternalName))
{
view.ViewFields.Delete(field);
}
}
}
view.Update();
}