以编程方式更新 SharePoint 中的多个字段
Update multiple fields in SharePoint programmatically
我正在尝试更新 SharePoint 中多个字段(具有相同名称)的一些属性。
我试过这个:
var site = this.Site.RootWeb;
var fields = site.Fields;
foreach (SPField field in fields)
{
if (field.Group.Contains("My Custom Columns"))
{
if (field.Title.Contains("Custom field"))
{
if (field.DefaultValue != null) {
field.DefaultValue = null;
field.Update(true);
}
}
}
}
它用名称 "Custom field" 更新了第一列,但在它给我这个错误之后:
Collection was modified; enumeration operation may not execute.
at Microsoft.SharePoint.SPBaseCollection.SPEnumerator.System.Collections.IEnumerator.MoveNext()
是否无法在 foreach 循环中更新对象?
我认为问题出在你的
foreach (SPField field in fields)
行代码。您实质上是在修改循环访问的集合。
我建议您尝试循环并将所有字段的 ID 放入
List<GUID>
然后对该集合执行 foreach 语句以获取每个字段并更新其值。
List<Guid> guidsList = new List<guid>();
foreach (SPField field in fields)
{
if (field.Group.Contains("My Custom Columns"))
{
if (field.Title.Contains("Custom field"))
{
guidsList.add(field.id)
}
}
}
foreach(Guid currentFieldId in guidsList){
//Get your field
//Update what needs to be updated
}
非常感谢
特鲁兹
出现此错误是因为您在迭代时试图修改字段集合。
解决方案是替换行:
foreach (SPField field in fields)
和
foreach (var field in fields.Cast<SPField>().ToList())
我正在尝试更新 SharePoint 中多个字段(具有相同名称)的一些属性。
我试过这个:
var site = this.Site.RootWeb;
var fields = site.Fields;
foreach (SPField field in fields)
{
if (field.Group.Contains("My Custom Columns"))
{
if (field.Title.Contains("Custom field"))
{
if (field.DefaultValue != null) {
field.DefaultValue = null;
field.Update(true);
}
}
}
}
它用名称 "Custom field" 更新了第一列,但在它给我这个错误之后:
Collection was modified; enumeration operation may not execute.
at Microsoft.SharePoint.SPBaseCollection.SPEnumerator.System.Collections.IEnumerator.MoveNext()
是否无法在 foreach 循环中更新对象?
我认为问题出在你的
foreach (SPField field in fields)
行代码。您实质上是在修改循环访问的集合。
我建议您尝试循环并将所有字段的 ID 放入
List<GUID>
然后对该集合执行 foreach 语句以获取每个字段并更新其值。
List<Guid> guidsList = new List<guid>();
foreach (SPField field in fields)
{
if (field.Group.Contains("My Custom Columns"))
{
if (field.Title.Contains("Custom field"))
{
guidsList.add(field.id)
}
}
}
foreach(Guid currentFieldId in guidsList){
//Get your field
//Update what needs to be updated
}
非常感谢
特鲁兹
出现此错误是因为您在迭代时试图修改字段集合。
解决方案是替换行:
foreach (SPField field in fields)
和
foreach (var field in fields.Cast<SPField>().ToList())