Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sharepoint向网站集中的所有列表/文档库添加字段_C#_Sharepoint - Fatal编程技术网

C# Sharepoint向网站集中的所有列表/文档库添加字段

C# Sharepoint向网站集中的所有列表/文档库添加字段,c#,sharepoint,C#,Sharepoint,我将其添加到指定列表中,但我希望浏览网站集中的所有列表。我只是不知道是什么让这不起作用 适用于一个列表的代码: void btnAdd_Click(object sender, EventArgs e) { try { using (SPSite site = new SPSite("http://asdf:150/sites/test")) { using (SPWe

我将其添加到指定列表中,但我希望浏览网站集中的所有列表。我只是不知道是什么让这不起作用

适用于一个列表的代码:

    void btnAdd_Click(object sender, EventArgs e)
    {
        try
        {
            using (SPSite site = new SPSite("http://asdf:150/sites/test"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPList list = web.Lists["test8"];

                    //Needed?
                    site.AllowUnsafeUpdates = true;
                    web.AllowUnsafeUpdates = true;

                    string mainLocation = list.Fields.Add("New Field", SPFieldType.Text, false, false, null);
                    readOnly(list, mainLocation);

                    //Add to default view (will be removed after testing)
                    SPView view = list.DefaultView;
                    defaultView(view, "New Field");
                }
            } 
        }
        catch (Exception ex)
        {
        }
    }
我想将该字段添加到网站集中的所有列表中,但我不知道我可能做错了什么,这就是我到目前为止所做的

void btnAdd_Click(object sender, EventArgs e)
        {
            using (SPSite site = new SPSite("http://asdf:150/sites/test"))
            {
                using (SPWeb web = site.OpenWeb())
                {
                    //Needed?
                    site.AllowUnsafeUpdates = true;
                    web.AllowUnsafeUpdates = true;
                    try
                    {
                        SPListCollection lists = web.Lists; // ??
                        foreach (SPList list in lists)
                        {
                            string mainLocation = list.Fields.Add("New Field", SPFieldType.Text, false, false, null);
                            readOnly(list, mainLocation);

                            //Add to default view (will be removed after testing)
                            SPView view = list.DefaultView;
                            defaultView(view, "New Field");
                        }
                    }
                    catch (Exception)
                    {
                        // some exception handling
                    }
                    finally
                    {
                        //web.Dispose();
                    }
                }
            }
        }
辅助方法

void readOnly(SPList list, string name)
{
    SPField listField = list.Fields.GetFieldByInternalName(name);
    listField.ReadOnlyField = true;
    listField.Update();
}

void defaultView(SPView view, string field)
{
    view.ViewFields.Add(field);
    view.Update();
}

希望你们中的任何人都比我聪明:)

我发现的第一件事是,你们只是在检查网站集根SPWeb中的所有列表

根SPWeb也可以有子SPWeb,您需要遍历这些子SPWeb


除此之外,如果您指定了什么是不工作的或“错误的”,这将有所帮助。

我运行您的代码,您有两个主要问题。 1.在某些列表中,默认视图可以为空。所以你应该检查一下

SPView view = list.DefaultView;
if(view != null)
{
    defaultView(view, "New Field");
}
二,。更改列表时,将修改SPListCollection。你应该 用于遍历列表的临时IEnumerable

using System.Linq;

SPListCollection listCollection = web.Lists;
IEnumerable<SPList> lists = listCollection.Cast<SPList>();
foreach (SPList list in lists)
{

那怎么了?你有例外吗?谢谢你的提示,我可能也要经历一下。下次我会记得详细说明出了什么问题:)出了什么问题,是它没有做任何事情,我看不到任何列表被更改,我也没有地方检查异常。超级!我添加了:catch(Exception ex){label.Text=ex.Message;}将其添加到该按钮所在的wap部件的标签中。我得到了一个解释:收藏被修改了;枚举操作不能执行。非常有用!现在我只需要找出Cast不被识别的原因。我不认为
Cast
SPListCollection
的一个实例方法。此处未列出它:。请注意,这里有一个
GetEnumerator
GetTypedEnumerator
。好的提示,我正在尝试实现这一点(编译),但到目前为止运气不佳:)当我找到IEnumerable list=listCollection.Cast()的正确语法时,设置为接受答案;。非常感谢您,现在它已经编译了,但是仍然得到了相同的错误,在一个答案中发布了我的完整代码,这样您可以更好地看到。
catch (Exception ex)
{
    Console.WriteLine(ex.ToString());
}