2009-12-04 1 views
3

Хорошо, кто-нибудь знает, как/если вы можете клонировать представление SharePoint, а затем добавлять его в список. Перегрузки SPViewCollection.Add не будут иметь экземпляр SPView, и я не смог найти документацию, которая указывала бы, как это сделать.Добавление клонированного 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! 

Конечный результат я хочу новый взгляд копировать поведение первоначальный вид за исключением измененного запроса. Я готов пойти другим путем, но я не уверен, что это такое. (Я заметил свойство BaseViewID, которое может помочь, но оно доступно только для чтения).

Любое предложение или подсказки будут оценены.

ответ

10

Если вы клонируете SPView, используя SPView.Clone (название, rowlimit, paged, default), то он автоматически добавляется в этот список в виде нового представления. Или, по крайней мере, это когда вы вызываете 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. Прошло несколько месяцев с тех пор, как вы опубликовали это, но я решил, что оставлю это для всех, кто сталкивается с этим, делая поиск этого материала.

+0

@ccomet, Спасибо, это именно то, что я искал. Мне никогда не приходилось проверять свойства SPView для Clone. –

+0

@Grace Примечание. Я попытался использовать SPView.Clone(), как описано выше, и определение вида отображается без отображения отображаемых элементов списка. Только после того, как я нажму «ok» в «Modify View», появятся записи. Не могли бы вы узнать, почему это может произойти? благодаря –

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);

Вы получаете новый взгляд с новым имя и то же содержимое.

+0

Да, это то, что я сейчас делаю. Я надеялся пойти на другой маршрут, чтобы выбрать любые настройки, сделанные в представлении (GroupHeader/GroupFooter). Спасибо хоть. –

+0

Хорошо, все еще не нашли ничего, что указывает, что я могу сделать это так, как хочу. Отмечая это как ответ (даже если мне это не очень нравится). –