添加记录时使所有列都可编辑,而现有记录仅允许编辑某些列

Make all columns editable when adding a record while existing records only allow some columns to be edited

问题描述

我正在尝试使用用于 display/update/create 记录的 Telerik UI 实现网格。网格配置为使用 in-cell 编辑和更新,只有一些列是可编辑的,但是当用户添加记录时,新添加行的每个单元格都应该是可编辑的。我已经尝试挂钩 Edit 事件并使字段可编辑,但是通过这样做,不仅新行的 Title 单元格变得可编辑,而且现有的标题 个单元格。

视图的相关代码部分可以在下面找到。

Data.cshtml

<script>
    'use strict';

    function onEdit(event) {
        if (event.model.isNew()) {
            event.model.fields.Title.editable = true;
        }
    }
</script>
@(Html.Kendo().Grid<DataViewModel>()
    .Name("DataGrid")
    .Columns(columns =>
    {
        columns.Bound(model => model.Title);
        columns.Bound(model => model.Description);
        columns.Bound(model => model.Count);
    })
    .Editable(edit => edit.Mode(GridEditMode.InCell))
    .ToolBar(toolbar =>
    {
        toolbar.Create();
        toolbar.Save();
    })
    .Events(events => events
        .Edit("onEdit")
    )
    .DataSource(dataSource => dataSource
        .Ajax()
        .Batch(true)
        .ServerOperation(false)
        .Read("DataRead", "Data")
        .Create("DataCreate", "Data")
        .Update("DataUpdate", "Data")
        .Model(model =>
        {
            model.Id(x => x.Id);
            model.Field(x => x.Title).Editable(false);
        })
    )
)

Kendo UI v2020.2.617, Telerik.UI.for.AspNet.Core 2020.2.617

一个选项不是将模型设置为可编辑 属性 并挂钩 onEdit 事件,您可以尝试以下将调用 js 函数来确定列是否应可编辑的方法:

@(Html.Kendo().Grid<DataViewModel>()
    .Name("DataGrid")
    .Columns(columns =>
    {
        columns.Bound(model => model.Title).Editable("titleEditable");
        columns.Bound(model => model.Description);
        columns.Bound(model => model.Count);
    })
    //truncated for brevity


<script>
        function titleEditable(dataItem) {
            return dataItem.isNew();
        }
</script>