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

时间:2014-06-10 04:29:26

标签: kendo-ui kendo-grid kendo-asp.net-mvc

我有一个场景,我有一个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;
                 }

             });

3 个答案:

答案 0 :(得分:2)

  1. 最好的方法是使列可编辑。  e.g。

    model.Field(d => d.CountryName).Editable(true);
    
  2. 和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());

    }
}

}