好的,有没有人知道如何克隆SharePoint视图然后将其添加到列表中。 SPViewCollection.Add重载不会占用SPView的实例,我找不到任何指示如何执行此操作的文档。
例如,我想基本上这样做:
var myList = SPContext.Current.Web.List;//or something similar
var baseView = myList.DefaultView;
var myNewView = baseView.Clone("my view", base.RowLimit, base.Paged, false);
myNewView.Query = "<Where>......</Where>";
myList.Views.Add(myNewView);//this overload doesn't exist!
最终结果是我希望新的View复制原始视图的行为,但更改的查询除外。我愿意走另一条路,但我不确定那是什么。 (我注意到可能有用的BaseViewID属性,但它是只读的。)
任何建议或提示都将不胜感激。
答案 0 :(得分:10)
如果使用SPView.Clone(title,rowlimit,paged,default)克隆SPView,则它会自动作为新视图添加到该列表中。或者,至少,当你调用Update()时(很像SPList.Items.Add())。例如,我执行以下操作来创建仅在查询中不同的克隆视图:
SPView thisView = thisList.DefaultView;
thisView = thisView.Clone("High Priority", 100, true, false);
thisView.Query = "<GroupBy Collapse=\"TRUE\" GroupLimit=\"100\"><FieldRef Name=\"dlCategory\" /></GroupBy><Where><Eq><FieldRef Name=\"dlPriority\"></FieldRef><Value Type=\"Number\">2</Value></Eq></Where>";
thisView.Update();
现在我的列表(thisList,就像它一样)有一个新视图,它具有与默认视图相同的所有属性,除了它现在按列“dlCategory”分组并过滤掉“dlPriority”不是2的任何内容。 你发布这个已经好几个月了,但我想我会在搜索这些东西的时候把它留给其他人。
答案 1 :(得分:4)
我知道这并不是您所希望的,但是SPFiles对于二进制副本的视图有错误,所以请尝试在重载上传递相同的值:
SPList list = SPContext.Current.Web.Lists["Test"];
SPViewview = list.Views["All Items"];
list.Views.Add(view.Title + "_NEW", view.ViewFields.ToStringCollection(),
view.Query, view.RowLimit, view.Paged, view.DefaultView);
您将获得一个包含新名称和完全相同内容的新视图。