剑道网格在插入期间启用编辑,在编辑期间禁用(仅适用于一列)

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 声明)。当我也单击编辑时,由于设置了页面加载标志,下拉菜单是可编辑的。

即使OnEditmethod 被执行并且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());
        
    

【讨论】:

以上是关于剑道网格在插入期间启用编辑,在编辑期间禁用(仅适用于一列)的主要内容,如果未能解决你的问题,请参考以下文章

刷新后剑道网格单元重新聚焦

编辑网格时,如何按行禁用特定字段?

禁用剑道网格

如何在剑道网格中自动启用或禁用滚动条?

剑道网格单元启用/禁用

在编辑期间设置 Telerik MVC 网格列属性