我让它将它添加到指定的列表,但我想通过网站集中的所有列表。我不知道是什么导致这不起作用。
适用于一个列表的代码:
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();
}
希望你们中的任何一个人在这里比我更聪明:)
答案 0 :(得分:0)
我发现的第一件事是您只检查网站集的根SPWeb中的所有列表。
根SPWeb还可以包含您需要迭代的子SPWebs。
除此之外,如果您指定了哪些不起作用或“错误”会有所帮助?
答案 1 :(得分:0)
我运行你的代码,你有两个主要问题。 1.默认视图在某些列表中可以为null。所以你应该检查一下。
SPView view = list.DefaultView;
if(view != null)
{
defaultView(view, "New Field");
}
2。当您对列表进行更改时,将修改SPListCollection。你应该有 用于迭代列表的临时IEnumerable。
using System.Linq;
SPListCollection listCollection = web.Lists;
IEnumerable<SPList> lists = listCollection.Cast<SPList>();
foreach (SPList list in lists)
{
3。不要忽略Excaptions。添加一些代码来捕获阻止,这可以帮助你。
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}