以编程方式更新SharePoint中的多个字段

时间:2015-05-18 12:59:43

标签: c# sharepoint

我正在尝试在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);
                    }                      
                }
            }
        }

它使用名称“自定义字段”更新第一列,但是在它给我这个错误之后:

Collection was modified; enumeration operation may not execute.  
at Microsoft.SharePoint.SPBaseCollection.SPEnumerator.System.Collections.IEnumerator.MoveNext()  

是否无法在foreach循环中更新对象?

2 个答案:

答案 0 :(得分:1)

由于您在迭代时尝试修改字段集合,因此会发生此错误。

解决方案是更换线路:

foreach (SPField field in fields)

foreach (var field in fields.Cast<SPField>().ToList())

答案 1 :(得分:0)

我认为问题出在你的

var activeCustomers = Customers.Where(x => x.Status == "A")
    Select(x => new Customer{ Status = x.Status, Code = x.Code }).ToList(); 

代码行。您实际上是在修改正在循环的集合。

我建议您尝试循环并将所有字段的ID添加到

foreach (SPField field in fields)

然后对此集合执行foreach语句,获取每个字段并更新它的值。

List<GUID>

非常感谢

Truez