剑道网格编辑事件处理程序不更新行
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
);
【讨论】:
以上是关于剑道网格编辑事件处理程序不更新行的主要内容,如果未能解决你的问题,请参考以下文章