当我使用内联下拉列表拉出其中一个字段时,我有一个网格集。
我可以从下拉列表数据项中检索我需要的值,我可以使用下拉列表在网格的编辑行中设置值。
只要A,B,C和D可编辑,以下代码就可以正常工作......但是......这些值不应该是可编辑的。这些单元格中的值应严格按下拉列表的值驱动。
function ddl_OnSelect(e)
{
var DDLdataItem = this.dataItem(e.item);
var A = DDLdataItem.A;
var B = DDLdataItem.B;
var C = DDLdataItem.C;
var D = DDLdataItem.D;
var grid = $('#grd').data('kendoGrid');
var editRow = grid.dataItem("tr.k-grid-edit-row");
editRow.set("A", DDLdataItem.A);
editRow.set("B", DDLdataItem.B);
editRow.set("C", DDLdataItem.C);
editRow.set("D", DDLdataItem.D);
}
我觉得我应该能够在模板列中显示值,但是我没有在column.template上找到任何好的文档,当我做这样的事情时,它只给了我一个空列。
columns.Template(
@<text>
<input type="text" name="A" value="@item.A" readonly />
</text>
).Title("A");
更新
好的....所以我做了什么&#34;修复&#34;问题是......
首先,我创建了一个名为ReadOnlyCurrency的新editortemplate,并将其放在共享的EditorTemplates中。
然后,对于适用于此的3个货币列中的每一个,我添加了编辑器模板名称属性。
.EditorTemplateName("ReadOnlyCurrency")
然后我复制了货币编辑器模板的内容并将其粘贴到readonlycurrency模板
中我关闭了微调器,使其成为只读,并使其启用为假。
@model decimal?
@(Html.Kendo().CurrencyTextBoxFor(m => m)
.HtmlAttributes(new { style = "width:100%;", @readonly = "readonly" })
.Enable(false)
.Min(0)
.Spinners(false)
)
这足以满足我的目的,但我不打算将此作为答案。
我宁愿有一个格式化为货币的标签......但我对编辑模型在模型中传递的方式有疑问。
答案 0 :(得分:0)
在telerik社区的帮助下,我找到了更好的解决方案。
首先,我们将模型中的字段保留为可编辑:
model.Field(p => p.A);
model.Field(p => p.B);
model.Field(p => p.C);
然后在列绑定中,我们将editable设置为一个总是返回false的函数:
columns.Bound(p => p.A).Title("A").Editable("editable").ClientTemplate("<span class='A'>#: kendo.toString(A, 'C') #</span>").ClientFooterTemplate("#= kendo.toString(sum, 'C') #");
columns.Bound(p => p.B).Title("B").Editable("editable").ClientTemplate("<span class='B'>#: kendo.toString(B, 'C') #</span>").ClientFooterTemplate("#= kendo.toString(sum, 'C') #");
columns.Bound(p => p.C).Title("Total").Editable("editable").ClientTemplate("<span class='C'>#: kendo.toString(C, 'C') #</span>").ClientFooterTemplate("#= kendo.toString(sum, 'C') #");
然后在change函数中我们在dataItem中设置值,并在clientRow中设置客户端值。
var editRow = $("tr.k-grid-edit-row").closest("[data-role=grid]").data("kendoGrid").dataItem("tr.k-grid-edit-row");
var clientRow = $("tr.k-grid-edit-row");
editRow.set("A", this.dataItem(e.item).A);
editRow.set("B", this.dataItem(e.item).B);
editRow.set("C", this.dataItem(e.item).C);
clientRow.find(".A").text(kendo.toString(this.dataItem(e.item).A, 'C'));
clientRow.find(".B").text(kendo.toString(this.dataItem(e.item).B, 'C'));
clientRow.find(".C").text(kendo.toString(this.dataItem(e.item).C, 'C'));
到目前为止,这给了我正在寻找的功能。