【问题标题】:Dynamic default value for Kendo GridKendo Grid 的动态默认值
【发布时间】:2015-05-24 03:16:08
【问题描述】:

我想在我的 Kendo Grid 中添加一个 auto increment 列。该字段不是服务器端自动增量,因为我希望用户看到该值并能够更改它。

我目前的解决方案是向Create 按钮添加一个click 属性并遍历行以找到最高值并将其递增。

但是我怎样才能在新创建的行中插入这个值呢? Click 事件在新行创建之前发生。

所以有两种可能的解决方案:

  1. 有一个变量作为默认值并在我的 JS 代码中更新它。
  2. 以某种方式访问​​新创建的行,并更新值。

这是我的 JS 代码:

function createClick(id) {
    var grid = $("#" + id).data('kendoGrid');
    var highestRadif = 0;
    grid.tbody.find('>tr').each(function () {
        var dataItem = grid.dataItem(this);
        var radif = dataItem.SRadifReqR;
        highestRadif = highestRadif < radif ? radif : highestRadif;
    })
    alert(++highestRadif);
}

【问题讨论】:

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


    【解决方案1】:

    您可以使用 Grid 的 edit 事件将新的 generatedId 值添加到新 Grid 的 model

    这是他们documentation的一些解释:

    编辑

    在用户编辑或创建数据项时触发。

    • e.container jQuery,编辑容器元素的 jQuery 对象,它封装了编辑 UI。
    • e.model kendo.data.Model,要编辑的数据项。使用它的 isNew 方法来检查数据项是否是新的 (创建)或不(编辑)。
    • e.sender kendo.ui.Grid,触发事件的小部件实例。

    我想你的点击是这样的

    //generate id code
    vm.newId = ++highestRadif; // we need to store generated Id
    grid.addRow();
    

    然后在编辑事件上

    edit: function(e) {
        var model = e.model; // access edited/newly added model
        // model is observable object, use set method to trigger change event
        model.set("id", vm.newId);
    }
    

    注意:您的模式模型的字段必须设置属性editable: true,以便我们可以使用set 方法更改模型字段值。此外,如果您的字段架构需要验证,则需要将其删除。

    model: {
        id: "ProductID",
        fields: {
            ProductID: { editable: true, nullable: true },
        }
    }
    

    Sample

    【讨论】:

    • vm 是什么意思?那是什么?
    • 只是视图模型变量。如果您不使用视图模型对象,则可以使用窗口范围变量(例如 window.newId
    • Edit函数中编写整个方法会容易得多。你知道我怎样才能从e 得到Grid 吗?感谢您的帮助和关注。
    • Dion 它适用于整数字段,但不适用于字节。有什么棘手的解析吗?
    • 什么是字节,什么是整数字段?您的意思是要为模型 ID 分配字节值吗?
    【解决方案2】:

    我能够为此在数据源架构中放置一个函数。

    schema: {
        model: {
            id: "id",
            fields: {
                currencyType: { defaultValue: getDefaultCurrency },
                invoiceDate: { type: "date" }
            }
        }
    }
    
        function getDefaultCurrency() {
            return _.find(vm.currencyTypes, { id: vm.currencyId });
        };
    

    【讨论】:

    • 当我这样做时,我的表单没有发布,但使用 parameterMap 有效:if (type === "create") { data.id = kendo.guid(); }
    猜你喜欢
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 2012-12-28
    • 2014-09-22
    相关资源
    最近更新 更多