我有一个自定义列表,我通过单击列表的“设置”页面上的“从现有站点列添加”链接添加了“页面图像”字段。我现在想删除该字段,但点击“设置”页面上的字段名称不会产生“删除”功能。
如何从SharePoint中自定义列表中删除通过“从现有站点列添加”菜单项添加的字段?
答案 0 :(得分:3)
“页面图像”是一种特殊的SharePoint字段,定义为密封。这意味着一旦添加它就无法从UI中删除。但是可以通过编程方式删除它:
SPList list = web.Lists["CustomTest"];
SPField f = list.Fields["Page Image"];
f.Sealed = false;
f.Update();
list.Fields["Page Image"].Delete();
作为参考,该字段在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES\PublishingResources\PublishingColumns.xml
中定义。
答案 1 :(得分:2)
除了被密封外,字段可以是只读的,隐藏的等等。所有这些因素都可能阻止字段被删除。删除列表字段的更合适方法如下:
public static bool RemoveField(SPField spField)
{
if (spField == null)
{
WriteErrorToLog("spField is null! Please, provide a valid one");
return false;
}
bool res = false;
try
{
// check if it's a ReadOnly field.
// if so, reset it
if (spField.ReadOnlyField)
{
spField.ReadOnlyField = false;
spField.Update();
}
// check if it's a Hidden field.
// if so, reset it
if (spField.Hidden)
{
spField.Hidden = false;
spField.Update();
}
// check if the AllowDeletion property is set to false.
// if so, reset it to true
if (spField.AllowDeletion == null || !spField.AllowDeletion.Value)
{
spField.AllowDeletion = true;
spField.Update();
}
// If the AllowDeletion property is set,
// the Sealed property seems not to be examined at all.
// So the following piece of code is commented.
/*if(spField.Sealed)
{
spField.Sealed = false;
spField.Update();
}*/
// If the AllowDeletion property is set,
// the FromBaseType property seems not to be examined at all.
// So the following piece of code is commented.
/*if(spField.FromBaseType)
{
spField.FromBaseType = false;
spField.Update();
}*/
// finally, remove the field
spField.Delete();
spField.ParentList.Update();
res = true;
}
catch (Exception ex)
{
WriteErrorToLog(ex.Message);
}
return res;
}
public static bool RemoveField(SPList spList, string displayNameOrInternalNameOrStaticName)
{
SPField spField = GetFieldByName(spList, displayNameOrInternalNameOrStaticName);
if(spField == null)
{
WriteErrorToLog(string.Format("Couldn't find field {0}!", displayNameOrInternalNameOrStaticName));
return false;
}
return RemoveField(spField);
}
public static void WriteErrorToLog(string errorMsg)
{
// write error into log
}
阅读article,了解详情。
答案 2 :(得分:1)
转到文档库的设置页面中的“高级设置”。
在广告字段“允许管理内容类型”中,单击“是”并返回文档库设置
在名为“内容类型”的新部分下,点击“文档”
点击您要删除的字段;你应该看到一个“删除”按钮。