Добавление клонированного SPView в список - PullRequest
3 голосов
/ 04 декабря 2009

Хорошо, кто-нибудь знает, как / если вы можете клонировать представление 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!

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

Любые предложения или советы будут оценены.

Ответы [ 2 ]

10 голосов
/ 16 февраля 2010

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

4 голосов
/ 05 декабря 2009

Я знаю, что это не совсем то, на что вы надеялись, но 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);

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

...