如何删除/删除从现有网站列添加的自定义列表中的列?

时间:2009-10-13 15:20:55

标签: sharepoint moss sharepoint-2007

我有一个自定义列表,我通过单击列表的“设置”页面上的“从现有站点列添加”链接添加了“页面图像”字段。我现在想删除该字段,但点击“设置”页面上的字段名称不会产生“删除”功能。

如何从SharePoint中自定义列表中删除通过“从现有站点列添加”菜单项添加的字段?

3 个答案:

答案 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)

  1. 转到文档库的设置页面中的“高级设置”。

  2. 在广告字段“允许管理内容类型”中,单击“是”并返回文档库设置

  3. 在名为“内容类型”的新部分下,点击“文档”

  4. 点击您要删除的字段;你应该看到一个“删除”按钮。