如何在自动生成kendo网格列时自定义列模板?

时间:2017-06-08 08:51:42

标签: javascript kendo-grid kendo-asp.net-mvc

我使用javascript:

将数据源分配到Kendo网格中
    var dataSource = new kendo.data.DataSource({
        transport: {
            read: {
                url: "@Url.Action("GetProductList", "Home")",
                type: "POST"
            }
        }       
    });
    var grid = $("#gridHardwares").kendoGrid({
        dataSource: dataSource,
        height: 600,
        sortable: true,
        groupable: true,
        pageable: {
            refresh: true,
            pageSizes: true,
            buttonCount: 5
        },
        resizable: true
    }).data("kendoGrid");

请注意,数据源 - 列是动态生成的(它将每年扩展)。

因此,我找不到现在自定义列的方法。 我可以在这里做什么来自定义它,添加其他复选框列,编辑标题,还设置groupFooterTemplate?

以前,这些列是固定的,我可以轻松自定义:

        columns: [
        {
            template: "<input type='checkbox' class='checkbox' />",
            width: 20
        }, {
            field: "PRODUCT_NAME",
            title: "Product Name",
            width: 200
        }, {
            field: "PRICE2017",
            title: "Price 2017",
            width: 200,
            aggregates: ["sum", "average"],
            groupFooterTemplate: "Sum: #= kendo.toString(sum, '0.00') # || Average: #= kendo.toString(average, '0.00') #"
        }]

此外,是否可以在网格中编辑数据?

请告诉我,如果使用javascript不是一个好主意:( 任何建议或想法都非常感谢。谢谢你提前。

1 个答案:

答案 0 :(得分:0)

我在这里发布我的解决方案,也许它可以在将来帮助某人。

    var customColumns =  [{
            template: "<input type='checkbox' class='checkbox' />",
            width: 20
        }];

然后自定义您自己的标题:var customHeaders = []

    for (var i = 0; i < customHeaders.length; i++) {
    if (i > 4) // after Name, Description, Region etc..
    {
        if (i == 5) // start with the first price column
        {
            customColumns.push({ 
                title : customHeaders[i], 
                field: headers[i],
                width: 150,
                template:
                    "# if(" + headers[i] + " != null) {# " +
                    "#= kendo.toString(" + headers[i] + ", 'n') #" +
                    "# } else { #" +
                    "" +
                    "#} # ",
                aggregates: ["sum", "average"],
                groupFooterTemplate: "Sum: #= kendo.toString(sum, '0.00') # || Average: #= kendo.toString(average, '0.00') #"
            });
        }
        else // compare price with previous year
        {
            customColumns.push({ 
                title : customHeaders[i], 
                field: headers[i],
                width: 150,
                template:
                    "# if(" + headers[i] + " != null) {# " +
                    "#= calculatePercentage(" + headers[i-1] + ", " + headers[i] + ") #" +
                    "# } else { #" +
                    "" +
                    "#} # ",
                aggregates: ["sum", "average"],
                groupFooterTemplate: "Sum: #= kendo.toString(sum, '0.00') # || Average: #= kendo.toString(average, '0.00') #"
            });
        }
    }
    else
    {
        customColumns.push({ 
            title : customHeaders[i], // customized header
            field: headers[i] // original header
        });
    }
}

谢谢Sandman的提示!