我的问题的快速解释:我有一个可编辑的Kendo网格,其中一列是一个下拉列表,定义如下:
$('<input required data-text-field="fullName" data-value-field="approverGuid" data-bind="value:' + options.field + '"/>')
.appendTo(container)
.kendoDropDownList({
index: 0,
dataTextField: "fullName",
dataValueField: "approverGuid",
autoBind: false,
dataSource: {
transport: {
read: {
dataType: 'json',
url: '/requisitions/ajax/getreqapprovers?account=' + accountNum
}
},
},
value: options.field
});
我的问题是,在初始网格加载时,当我想显示fullName字段时,列只是一个常规文本元素,填充了approverGuid字段。一旦我在网格中单击,就会创建下拉列表,现在我们看到与我们之前看到的approverGuid相对应的正确fullName。我可以在我的下拉列表中选择任何名称,更新,并正确地将approverGuid写入我的数据库,但它也会恢复到我的网格中的approverGuid,因为dropdownlist元素已经消失。
有关如何最初显示名称的任何建议,而不会丢失更新我的数据库所需的Guid值吗?
答案 0 :(得分:1)
如果我理解正确,你需要显示&#34; fullName&#34;而不是&#34; approverGuid&#34;
如果我希望您在dataSource中有一个模型定义。如果没有,请查看Kendo API MODEL
例如:
var dataSource = new kendo.data.DataSource({
schema: {
model: {
id: "ID",
fields: {
ID: { editable: false, nullable: true },
approverGuid: { type: "number", validation: { required: true } },
fullName: { type: "string", validation: { required: true } }
}
}
一旦拥有模型,您就可以访问数据项目了,使用它可以为网格列定义模板
例如:
columns: [
{
field: "approverGuid",
title: "approverGuid",
template: function (dataItem) {
var html = '<span class="">' + kendo.htmlEncode(dataItem.fullName) + '</span>';
return html;
},
editor: function (container, options) {
$('<input required data-text-field="fullName" data-value-field="approverGuid" data-bind="value:' + options.field + '"/>')
.appendTo(container)
.kendoDropDownList({
index: 0,
dataTextField: "fullName",
dataValueField: "approverGuid",
autoBind: false,
dataSource: {
transport: {
read: {
dataType: 'json',
url: '/requisitions/ajax/getreqapprovers?account=' + accountNum
}
},
},
value: options.field
});
}
}]
现在,模板将显示全名,一旦进入编辑模式,您将进入下拉列表。希望这有帮助