2009-12-04 41 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.Clone(標題,行限制,分頁,默認值)克隆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的任何東西。 自發布此事以來已經有幾個月了,但我想我會把這一切留給任何其他人,搜索這些東西。

+0

@ccomet,謝謝,這正是我一直在尋找的。我從來沒有想過檢查克隆的SPView屬性。 – 2010-02-16 18:51:33

+0

@Grace注 - 我嘗試使用SPView.Clone()如上所述和視圖定義顯示沒有任何列表項正在顯示。只有在「修改視圖」中單擊「確定」後,纔會顯示條目。你有沒有機會知道爲什麼會發生這種情況?謝謝 – 2011-08-25 18:26:33

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)。不過謝謝。 – 2009-12-07 15:20:35

+0

好吧,仍然沒有發現任何表明我可以按照我想要的方式做到的事情。標記爲答案(即使我不太喜歡它)。 – 2009-12-09 18:28:25