我已经没有机会充分测试,但这个是我能想出的最好:
创建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
作为一个整体对文本列解决问题。此外,视图初始渲染和检索聚合项目之间的列表更改可能会导致总数与显示项目之间出现差异。