Kendo网格 - 单行汇总字段

时间:2014-06-11 09:40:51

标签: kendo-ui grid row aggregation summary

是否可以对一行剑道网格中的字段求和?我能够汇总表中的列,但不能汇总单行。我为每个字段设置了聚合,但它仅适用于“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\")#" },
]

非常感谢您的回答

1 个答案:

答案 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函数,用于计算字段JanMar的总计。

然后网格定义将是:

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/