剑道网格在插入期间启用编辑,在编辑期间禁用(仅适用于一列)
Posted
技术标签:
【中文标题】剑道网格在插入期间启用编辑,在编辑期间禁用(仅适用于一列)【英文标题】:Kendo grid enable editing during insert, disable during edit(applicable to only one column) 【发布时间】:2014-07-30 17:42:27 【问题描述】:我有一个场景,我有一个 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
method 被执行并且editable 设置为false,网格似乎在此代码执行之前已经加载,因此editable =false 没有反映。
如果我第二次点击编辑,由于之前的调用,现在可编辑设置为 false,因此下拉菜单按预期不可编辑。
在摘要中,标志设置对当前操作无效,但对紧接的下一个操作有效。我不确定我是否已经说清楚了。你们能帮忙吗?
更新 - 我尝试的另一个选项是,在将数据绑定到网格期间,我尝试将所有网格数据显式设置为可编辑为 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;
);
【问题讨论】:
【参考方案1】:最好的方法是使列可编辑。 例如
model.Field(d => d.CountryName).Editable(true);
和Onedit函数,替换下面提到的内部html,只是为了显示它作为标签。
function OnEdit(e)
e.container[0].childNodes['0'].innerHTML = e.model.CountryName;
【讨论】:
【参考方案2】:尝试通过以下方式禁用剑道下拉菜单:
function OnEdit(e)
if (e.model.isNew() == false)
$("#CountryName").data("kendoDropDownList").enable(false);
如果你想在编辑模式下将下拉列表显示为标签,你可以试试这个
function OnEdit(e)
if(e.container.find("input").attr("id") === 'CountryName')
this.closeCell();
注意:上面的代码是考虑将“CountryName”作为下拉列表的id
编写的。如果id
不同,请更改。
【讨论】:
对不起,这确实有效。但它显示为禁用的下拉菜单,需要将其显示为标签 closecell() 给了我一个来自 kendo,web.min.js 的错误 - 无法获取未定义或空引用的属性“模板” 是否有一个选项可以像您的第一种方式一样禁用下拉菜单,然后我们可以删除所有使其看起来像下拉菜单的类吗? 你可以创建一个小提琴吗? 你使用什么版本的 kendo.web.min.js?【参考方案3】:我试过了,效果很好。
这只是一种解决方法:
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());
【讨论】:
以上是关于剑道网格在插入期间启用编辑,在编辑期间禁用(仅适用于一列)的主要内容,如果未能解决你的问题,请参考以下文章