以编程方式将列表视图添加到 Sharepoint 2013 C# 中的所有列表

Posted

技术标签:

【中文标题】以编程方式将列表视图添加到 Sharepoint 2013 C# 中的所有列表【英文标题】:Add a listview programmatically to all lists in Sharepoint 2013 C# 【发布时间】:2013-11-13 16:21:42 【问题描述】:

我需要为所有列表创建一个视图。视图必须显示必填字段(在每个列表中都不同)。

检索第二个列表时一切都出错了。第一个 for-each 给出以下错误消息:

集合已修改;枚举操作可能无法执行

我真的不知道我为什么会遇到这个错误。

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    
        SPWeb myWeb = SPContext.Current.Web;
        SPListCollection myLists = myWeb.GetListsOfType(SPBaseType.DocumentLibrary);
        StringCollection viewFields = new StringCollection();
        String viewName = "Mandatory fields view";
        String query = "<OrderBy><FieldRef Name='Modified'/></OrderBy><Where><Eq><FieldRef Name='Author'/><Value Type='Integer'><UserID Type='Integer' /></Value></Eq></Where>";

        foreach (SPList list in myLists)
        
         foreach (SPField field in list.Fields)
            

                if (field.Required)
                
                    viewFields.Add(field.ToString());
                

            
            list.Views.Add(viewName, viewFields, query, Int32.MaxValue, true, false);
            viewFields.Clear();
        
    

【问题讨论】:

【参考方案1】:

或者您可以只使用 for 循环而不是 foreach:

for(int i = 0; i< myLists.Count; i++)
  SPList list = myLists[i];
  //etc..

【讨论】:

谢谢,这对我很有帮助!【参考方案2】:

尝试将foreach (SPList list in myLists) 更改为foreach (SPList list in myLists.ToList())。这会将 myLists 的值复制到在每个 foreach 循环期间无法修改的单独列表。

【讨论】:

感谢您的回答,但我使用了 for 循环而不是 foreach。

以上是关于以编程方式将列表视图添加到 Sharepoint 2013 C# 中的所有列表的主要内容,如果未能解决你的问题,请参考以下文章

SharePoint:如何以编程方式将项目添加到自定义列表实例

以编程方式在Sharepoint中实例化Web部件页面

以编程方式在SharePoint文档库中添加/创建新文档

使用 CSOM 进行初始部署后,将 SharePoint 列表 Web 部件添加到特定页面

使用客户端对象模型 SharePoint 2010 以编程方式获取 ListItemVersion

以编程方式将行添加到带有背景色的网格[重复]