我已經沒有機會充分測試,但這個是我能想出的最好:
創建WebPart
其中包含兩個控件:
- 一個
ViewToolBar
與上下文要顯示的列表/視圖
- 甲
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
作爲一個整體對文本列解決問題。此外,視圖初始渲染和檢索聚合項目之間的列表更改可能會導致總數與顯示項目之間出現差異。