我以编程方式将字段添加到列表中。以下行将新字段添加到现有列表
Lists.AddFieldToList(warrantyList, SPFieldType.Text, "internalFieldName", "ShownFieldName", "Comment", false, false, false);
这是被称为的方法:
public static bool AddFieldToList(SPList list, SPFieldType fieldType, string fieldInternalName, string fieldDisplayName, string fieldDescription, bool unique, bool required, bool indexed)
{
SPField field = new SPField(list.ParentWeb.Fields, fieldType.ToString(), fieldInternalName);
bool success = AddFieldToList(list, field, fieldDisplayName, fieldDescription, unique, required, indexed);
return success;
}
在方法的第一行之后,字段填充了大量信息,但没有internalName(NULL)和包含“internalFieldName”的Title。
在第二行中调用以下方法:
public static bool AddFieldToList(SPList list, SPField field, string fieldDisplayName, string fieldDescription, bool unique, bool required, bool indexed)
{
if (field != null &&
(!list.Fields.Contains(field.Id)))
{
field.ReadOnlyField = false;
field.Title = fieldDisplayName;
field.Description = fieldDescription;
field.EnforceUniqueValues = unique;
field.Indexed = indexed;
field.Required = required;
list.Fields.Add(field);
return true;
}
return false;
}
之后标题更改为“ShownFieldName”(当然)。但我的目标是有一个内部名称“internalFieldName”,它有一个Displayname“ShownFieldName”,所以“ShownFieldName”显示在列表中,但我可以通过内部名称访问该项目
as field.InternalName是readOnly:我该如何解决这个问题?
答案 0 :(得分:6)
此行创建一个SPField
对象,该对象可以包含您需要的内部名称(displayName
传递给constructor等于 fieldInternalName ):
SPField field = new SPField(list.ParentWeb.Fields, fieldType.ToString(), fieldInternalName);
但在将任何内容保存到数据库之前,您可以在此行中进行更改:
field.Title = fieldDisplayName;
以下是解决方案:
fieldInternalName
和fieldDisplayName
传递 internalFieldName 的列表中。SPList.Update()
方法。Title
属性更改为 ShownFieldName 。SPField.Update()
方法。答案 1 :(得分:2)
自SharePoint 2007以来,他们在SharePoint中有一个方法AddFieldAsXml
。如果这样做,您可以更好地控制添加字段的方式。请参阅上面链接中的示例。