Kendo网格单元格编辑

时间:2014-03-22 05:26:26

标签: c# asp.net-mvc kendo-ui telerik

我想手动编辑单元格,并根据输入的数据自动显示另一个单元格上的内容。

对于Eg: 如果数量已更改,则应计算总计(价格*数量)并在总计列

上显示结果

enter image description here

是否可以使用Kendo网格?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:7)

是的,有可能。如果搜索“KendoUI Grid calculated field”,您可以在互联网上找到一些信息。

解决方案取决于您选择的编辑模式的类型(“内联”,“incell”或“弹出”)。由于我没有在网格中看到任何列有触发版本的按钮,因此我们了解到您正在编辑incell。然后解决方案拦截save事件并计算该字段。

让您的DataSource定义为:

var ds = {
    data    : [
        { Id: 1, ItemName: "Galaxy", Price: "25000", Qty: 2, Total: 50000 },
        { Id: 1, ItemName: "Lumia", Price: "18000", Qty: 1, Total: 18000 },
        { Id: 1, ItemName: "Experia", Price: "10000", Qty: 3, Total: 30000 } 
    ],
    schema  : {
        model: {
            id : "Id",
            fields: {
                Id       : { type: 'number' },
                ItemName : { type: 'string' },
                Price    : { type: 'number' },
                Qty      : { type: 'number' },
                Total    : { type: 'number', editable: false }
            }
        }
    }
};

然后你的网格应该是这样的:

var grid = $("#grid").kendoGrid({
    dataSource: ds,
    editable  : "incell",
    pageable  : false,
    columns   :
    [
        { field: "ItemName", title: "Item Name" },
        { field: "Price", title: "Price" },
        { field: "Qty", title: "Qty" },
        { field: "Total", title: "Total" }
    ]
}).data("kendoGrid");

您需要添加到Grid定义的是save事件处理程序,它使用e.values检查哪个字段已更改(其中esave收到的事件信息{1}})并计算新的Total并使用模型上的set方法进行设置。

    save : function (e) {
        if (e.values && (e.values.Qty || e.values.Price)) {
            var qty = e.values.Qty || e.model.Qty;
            var price = e.values.Price || e.model.Price;
            e.model.set("Total", price * qty);
        }
    }

此处示例:http://jsfiddle.net/qA8QX/