我以编程方式将字段添加到列表中。下面的行将一个新字段添加到现有列表中
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“的标题。
在第二行中,调用了以下方法:
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 is readOnly:我该如何解决这个问题?
发布于 2011-11-09 04:09:36
此行创建一个SPField对象,该对象可能具有您需要的内部名称(传递给constructor的displayName等于fieldInternalName):
SPField field = new SPField(list.ParentWeb.Fields, fieldType.ToString(), fieldInternalName);但是,在将任何内容保存到数据库之前,需要在下面这一行中更改它:
field.Title = fieldDisplayName;以下是解决方案:
fieldInternalName和fieldDisplayName.Title属性更改为SPField.Update()方法。发布于 2011-11-09 05:15:06
从SharePoint 2007开始,他们在SharePoint中就有了一个方法AddFieldAsXml。如果这样做,您就可以更好地控制添加字段的方式。请参阅上面链接中的示例。
https://stackoverflow.com/questions/8053296
复制相似问题