剑道网格编辑事件处理程序不更新行

Posted

技术标签:

【中文标题】剑道网格编辑事件处理程序不更新行【英文标题】:Kendo Grid edit event handler not updating row 【发布时间】:2020-09-29 09:30:10 【问题描述】:

使用内联编辑将新项目添加到 Kendo Grid 时,ContractID 数据源将由选定的 OrgID 过滤。添加一行后,OrgID 列将不再可编辑(使用 isOrgEditable() 设置),但 ContractID 是。不幸的是,级联不适用于编辑,ContractID 的数据源未过滤。

为了解决这个问题,我订阅了编辑事件 (data-edit="setContractsDataSource") 并手动过滤数据源。这可行,但更新按钮没有做任何事情,并且编辑丢失了。

<div id="grid">
    <div class="k-content wide">
        <div>
            <div data-role="grid"
                 data-editable="inline"
                 data-edit="setContractsDataSource"
                 data-toolbar="[ name: 'create', text: 'Add Item' ]"
                 data-columns='[
                  field: "OrgID", title: "Company", editable: isOrgEditable, editor: orgDropDownEditor, template: "#: lookupForOrg(organisationID) #" ,
                  field: "ContractID", title: "Contract", editor: contractsDropDownEditor, template: "#: lookupForContract(ContractID) #" ,
                  command: ["edit", "destroy"], width: "220px" 
            ]'
            data-sortable="true"
            data-pageable="true"
            data-filterable="true"
            data-bind="source: items"></div>
        </div>
    </div>
</div>

【问题讨论】:

【参考方案1】:

通常情况下,我在写问题时解决了问题。为了将来参考,它没有被更新的原因是没有从事件处理程序返回true

function setContractsDataSource(e) 
    let orgID = e.model ? e.model.OrgID : this.dataItem().OrgID;
    if (orgID) 
        $("#contracts").data("kendoDropDownList").setDataSource(contractsData.filter(elt => elt.ContractorID == orgID));
    
    return true; // fixed it

随后确定该列仅在它已经包含一个值时才会更新,即如果之前它为空,则新值不会保存。 This telerik forum post 帮助解决了这个问题。合同栏的编辑需要valuePrimitive: true

function contractsDropDownEditor(container, options) 
    $('<input id="contracts" name="' + options.field + '"/>')
        .appendTo(container)
        .kendoDropDownList(
            autoBind: false,
            dataTextField: "ContractNo",
            dataValueField: "ContractID",
            dataSource: contractsData,
            optionLabel: "Select contract...",
            valuePrimitive: true
        );

【讨论】:

以上是关于剑道网格编辑事件处理程序不更新行的主要内容,如果未能解决你的问题,请参考以下文章

剑道网格行选择更改事件?

剑道网格取消编辑事件

剑道网格相当于 onEditComplete

刷新后剑道网格单元重新聚焦

空网格上的 ag-Grid 键处理程序

在 kendo ui 网格更改事件上获取单击的单元格