2009-11-27 135 views
0

我有一個類型爲'單行文本'的SharePoint列表列。開箱即用SharePoint僅提供了顯示此列類型的「計數」總計的功能。我希望能夠對數據執行自定義聚合(具體來說,將以數字形式保存爲文本的數據進行求和以克服this deficiency)。如何自定義SharePoint列表列聚合(總計)計算?

我已經找到了使用XSLTJavascript做對於計算列,類似的例子,但我認爲,這兩種方法都失敗,其中的數據分頁(僅聚集在屏幕上顯示的列表內容的子集)。

我想保留ListViewWebPart(渲染,排序,過濾,視圖定義,操作菜單等)的功能,但添加此功能。我怎樣才能做到這一點?

回答

0

我已經沒有機會充分測試,但這個是我能想出的最好:

創建WebPart其中包含兩個控件:

  1. 一個ViewToolBar與上下文要顯示的列表/視圖
  2. Literal包含視圖的呈現的HTML被顯示

然後這將呈現爲原始列表/視圖。

在渲染WebPart時,從視圖中獲取項目,將RowLimit指定爲最大值,以便檢索所有項目(而不僅僅是第一頁)。

迭代項目,計算合適的數據類型總數以保持精度。

將總數渲染爲HTML中的隱藏值,並用Javascript(例如method described here)覆蓋整個呈現的Count

代碼的草圖:

public sealed class TextAggregatingWebPart : WebPart { 
    protected override void CreateChildControls() { 
    base.CreateChildControls(); 

    var web = SPContext.Current.Web; 
    var list = web.Lists[SourceList]; 
    var view = list.Views[ViewOfSourceList]; 

    var toolbar = new ViewToolBar(); 
    var context = SPContext.GetContext(
    Context, view.ID, list.ID, SPContext.Current.Web); 
    toolbar.RenderContext = context; 
    Controls.Add(toolbar); 

    var viewHtml = new Literal {Text = view.RenderAsHtml()}; 
    Controls.Add(viewHtml); 
    } 

    protected override void Render(HtmlTextWriter writer) { 
    EnsureChildControls(); 
    base.Render(writer); 

    var web = SPContext.Current.Web; 
    var list = web.Lists[SourceList]; 
    var view = list.Views[ViewOfSourceList]; 

    var items = list.GetItems(new SPQuery(view) {RowLimit = uint.MaxValue}); 
    foreach (SPItem item in items) { 
     // Calculate total 
    } 

    // Render total and Javascript to replace Count 
    } 
} 

請注意,這並不與修改視圖屏幕只顯示Count作爲一個整體對文本列解決問題。此外,視圖初始渲染和檢索聚合項目之間的列表更改可能會導致總數與顯示項目之間出現差異。

0

總計您唯一能做的事情是:

Average;計數;最大;敏;和;標準偏差;差異

不知道如何計算其他任何東西。