是否可以对一行剑道网格中的字段求和?我能够汇总表中的列,但不能汇总单行。我为每个字段设置了聚合,但它仅适用于“footerTemplate”。我希望我的问题很清楚......谢谢你的帮助!
示例:
用户| Jan |二月| Mar |总和
约翰| 1000 | 2000年| 3000 | ???
彼得| 1500 | 2500 | 3500 | ???footerTemplate SUM | 2500 | 4500 | 6500 | ???
在DataSource中,我定义聚合和组:
aggregate: [
{ field: "Jan", aggregate: "sum" },
{ field: "Feb", aggregate: "sum" }, ...
],
...
group: {field: "???", aggregates: [ { field: "Jan", aggregate: "sum" }, { field: "Feb", aggregate: "sum" } ]}
...
columns: [
...,
{ "field": "???", "title": "Summary", "format": "{0:n0}", "footerTemplate": "#= kendo.toString(sum, \"C\")#", "groupFooterTemplate": "#= kendo.toString(sum, \"C\")#" },
]
非常感谢您的回答
答案 0 :(得分:2)
获取它的最简单方法是在Sum
中为您计算一个额外的列(我们称之为Grid
)。这个额外的列使用模板来计算值,这个计算可以调用模型中的函数(最干净的)或直接硬编码。
示例:
// DataSource Definition
var ds = new kendo.data.DataSource({
data: [
{ Id:1, User: "John", Jan : 1000, Feb: 2000, Mar: 3000 },
{ Id:2, User: "Peter", Jan : 1500, Feb: 2500, Mar: 3500 }
],
pageSize: 10,
schema: {
model: {
id: "Id",
fields: {
Id: { type: 'number' },
User: { type: 'string' },
Jan: { type: 'number' },
Feb: { type: 'number' },
Mar: { type: 'number' }
},
Sum: function() {
return this.Jan + this.Feb + this.Mar;
}
}
}
});
我已经定义了一个Sum
函数,用于计算字段Jan
到Mar
的总计。
然后网格定义将是:
var grid = $("#grid").kendoGrid({
dataSource: ds,
pageable: true,
columns: [
{ field: "User" },
{ field: "Jan" },
{ field: "Feb" },
{ field: "Mar" },
{ title: "Sum", template: "#= Sum() #" }
]
}).data("kendoGrid");
注意:我没有包含聚合,因为您没有遇到此问题。
如您所见,Sum
列计算从模板调用时的总和。请在此处查看:http://jsfiddle.net/OnaBai/Bz3Y5/
第二种方法不是Sum
函数,而是计算模板中的值。
var grid = $("#grid").kendoGrid({
dataSource: ds,
pageable: true,
columns: [
{ field: "User" },
{ field: "Jan" },
{ field: "Feb" },
{ field: "Mar" },
{ title: "Sum", template: "#= data.Jan + data.Feb + data.Mar #" }
]
}).data("kendoGrid");
在此处查看:http://jsfiddle.net/OnaBai/Bz3Y5/2/
这两种方法的缺点是每次调用模板时都必须计算总数,因此如果您进行分页,则可能需要进行一些额外的处理。如果您想避免这种情况,那么您可以在parse
:
DataSource
功能
var ds = new kendo.data.DataSource({
data: [
{ Id:1, User: "John", Jan : 1000, Feb: 2000, Mar: 3000 },
{ Id:2, User: "Peter", Jan : 1500, Feb: 2500, Mar: 3500 }
],
pageSize: 10,
schema: {
model: {
id: "Id",
fields: {
Id: { type: 'number' },
User: { type: 'string' },
Jan: { type: 'number' },
Feb: { type: 'number' },
Mar: { type: 'number' }
}
},
parse: function (d) {
$.each(d, function (idx, elem) {
elem.Sum = elem.Jan + elem.Feb + elem.Mar;
});
return d;
}
}
});
此parse
函数接收原始数据并将其转换为您想要的任何内容,添加,删除,转换原始数据中的任何字段,然后再将其发送到网格。
您可以在此处查看最后一种方法:http://jsfiddle.net/OnaBai/Bz3Y5/3/