我有一个场景,我有一个Kendo下拉列表,Kendo Datepicker作为网格中的几列。 在添加新记录时,下拉列表应该是可编辑的,在编辑模式下,此下拉列表应为不可编辑。
我已使用
在声明中声明Grid可编辑 .Editable()
model.Field(p => p.CountryName).Editable(true); // where CountryName is kendo dropdown
我正在尝试以这种方式编辑,
function OnEdit(e) {
if (e.model.isNew() == false) {
e.model.fields["CountryName"].editable = false
}
我观察到的行为是最初加载时,Editable设置为true(由于cshtml声明)。当我单击“编辑”时,由于设置了页面加载标志,因此下拉列表是可编辑的。
即使执行OnEdit
方法并且editable设置为false,网格似乎在此代码执行之前已加载,因此不会反映editable = false。
如果我点击编辑第二次,现在由于上一次调用,editable设置为false,因此下拉列表不能按预期编辑。
在摘要中,标记设置对当前操作无效,但对下一个操作无效。我不确定我是否说清楚了。你们能帮忙吗?
更新 - 我尝试的另一个选项,在数据绑定到网格期间,我尝试将settign可编辑显式设置为false以显示所有网格数据。我的假设只是加载的行将此字段设置为false。但在这种情况下,即使添加新记录也需要Editable false。
var grid2 = $("#Gridprepayment")。data(" kendoGrid")。dataSource.data(requiredData);
$.each(requiredData, function (i, row) {
var model = $("#Gridprepayment").data("kendoGrid").dataSource.at(i);
if (model) {
model.fields["CountryName"].editable = false;
}
});
答案 0 :(得分:2)
最好的方法是使列可编辑。 e.g。
model.Field(d => d.CountryName).Editable(true);
和Onedit函数,替换下面提到的内部html,只是为了将其显示为标签。
function OnEdit(e) {
e.container[0].childNodes['0'].innerHTML = e.model.CountryName;
}
答案 1 :(得分:1)
尝试按以下方式禁用kendo下拉列表:
function OnEdit(e) {
if (e.model.isNew() == false) {
$("#CountryName").data("kendoDropDownList").enable(false);
}
}
如果要在编辑模式下将dropdownList显示为标签,可以尝试此操作
function OnEdit(e) {
if(e.container.find("input").attr("id") === 'CountryName') {
this.closeCell();
}
}
注意:上面的代码是考虑" CountryName"作为下拉列表的id
。如果id
不同,请更改。
答案 2 :(得分:1)
我试过这个有效。它唯一的解决方法
function OnEdit(e) {
if (e.model.isNew() == false) {
if (e.container.find("input").attr("id") === 'CountryName') {
e.container.find("td:eq(0)").html($("#CountryName").val());
}
}
}