1

すべてのリストのビューを作成する必要があります。ビューは、必須のフィールドを表示する必要があります (リストごとに異なります)。

2 番目のリストが取得されると、すべてがうまくいきません。最初の 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();
        }
    }
4

2 に答える 2

1

または、foreach の代わりに for ループを使用することもできます。

for(int i = 0; i< myLists.Count; i++){
  SPList list = myLists[i];
  //etc..
}
于 2013-11-14T10:07:04.270 に答える
0

に変更foreach (SPList list in myLists)してみてくださいforeach (SPList list in myLists.ToList())。これにより、myLists の値が、各 foreach ループ中に変更できない別のリストにコピーされます。

于 2013-11-13T19:31:28.717 に答える