【问题标题】:Enable or disable kendo grid columns based on another column value根据另一个列值启用或禁用剑道网格列
【发布时间】:2017-10-23 14:24:44
【问题描述】:

我有一个剑道网格,其中有一个复选框,它是使用客户端模板呈现的。如果选中该复选框,则我希望启用与其相邻的列,如果未选中,则应禁用该列,即用户不应对其进行编辑或键入。我尝试通过将编辑事件绑定到网格来做到这一点,但只有当网格进入编辑模式时才会调用编辑事件,并且在对网格进行更改时不会调用该函数。非常感谢任何指导。

代码sn-p:

debugger;

function OnGridChange(e) {

    console.log("grid edit mode",e);

    var model = $("#AppAccountInternalGrid").data("kendoGrid");

    console.log("data source edit mode");

    if (e.model.Roll == "true")


        $(e.container).find('input[name="RollupName"]').attr("disabled", false);

    else

        $(e.container).find('input[name="RollupName"]').attr("disabled", true);


}

       @(Html.Kendo().Grid(Model.App_Client_Mapping)
    .Name("AppAccountInternalGrid")
   .Events(ev=>ev.Edit("OnGridChange"))

.Columns(columns =>
{

    columns.Bound(p => p.AccountMappingID).Hidden().Title("AccountMappingID").Width(130);


    columns.Bound(p => p.ExternalAccount).Title("ExternalAccount").Width(150);         

    columns.Bound(p => p.Roll).ClientTemplate("<input  onchange='OnGridChange(#=AccountMappingID#)' type='checkbox' " +
                            "#=Roll? 'checked=checked' : '' #" +
                            "disabled='disabled' </input>").Width(150);


    columns.Bound(p => p.RollupName).Title("RollupName").Width(150).HtmlAttributes(new{@class="disabled"});

    columns.Command(command => { command.Edit(); command.Destroy(); }).Width(150);



})


     .Editable(editable => editable.Mode(GridEditMode.InLine))          
     .ColumnMenu()
     .DataSource(dataSource => dataSource
             .Ajax()
      //.Events(ev=>ev.("OnGridChange"))
        .PageSize(50)
        .Model(model =>
        {
            model.Id(p => p.AccountMappingID);


        }


        )

     .Update(update => update.Action("Editing_Update", "AppAccounts", new { clientid = @clientid }))

 )



            )

Roll 在模型中具有 bool 属性,将其呈现为复选框。最初,未勾选复选框,因此用户无法编辑汇总名称。但是当用户进入编辑模式并勾选复选框时,用户应该能够编辑卷名。默认情况下,我希望禁用汇总名称。它应该在选中复选框时启用。

【问题讨论】:

  • 你可以使用 jquery 来完成这项工作
  • @keith:我正在使用 javascript。

标签: javascript asp.net-mvc-4 checkbox kendo-grid kendo-asp.net-mvc


【解决方案1】:

我在剑道网格中有一个类似的案例。您应该知道的一件事是,当网格进入编辑模式时,行的字段是焦点。从这个角度来看,你可以做我所做的。

A.当网格进入编辑模式时,可以使用字段名称调用您的复选框(在您的示例中为 Roll)。在编辑事件中,您应该检查是否选中了 Roll 元素。您将获得的值将是该行的值。那时你可以将你的输入(我猜是 RollUpName)设置为禁用

$("#RollUpName").prop("disabled", true);

为了动态工作,您应该在复选框的更改事件上添加一个事件侦听器。可能通过使用某个类并将其输入到您的客户端模板中。每次更改复选框时,将更改的复选框将位于可编辑行中。此时您可以用同样的方式更改 RollUpName 的可编辑模型。

【讨论】:

    【解决方案2】:

    我使用 AJAX 和 javascript 来构建我的 Kendo Grid,但基本上您想要做的是使用模板来构建您的复选框列并添加一个类。然后在有人检查以隐藏/显示您的列时进行检查。这是一个例子:

    $(function () {
    $("#grid").kendoGrid({
      columns: [
        { field: "checkbox", template: '<input type="checkbox" style="margin-left: 4px;" class="checkone" />', editable: "false"},
        { field: "RollUp" },
        { field: "age" }
      ],
      editable: false,
      dataSource: [
          { RollUp: "Jane Doe", age: 30 },
          { RollUp: "John Doe", age: 33 }
      ]
    });
    var grid = $("#grid").data("kendoGrid");
      $('.checkone').on('click', function(){
        var checkedBox = $(this).prop("checked");
        if(checkedBox){
           $("#grid").data("kendoGrid").setOptions({ editable: true });
        }else{
           $("#grid").data("kendoGrid").setOptions({ editable: false });
        }
      });
    });
    });
    

    如果您有任何问题,请告诉我。

    【讨论】:

    • 感谢代码,但我使用的是 kendo mvc。我的问题是,当未选中复选框时,汇总名称列不应该是可编辑的。在编辑模式下,当用户选中复选框时,网格列应该被启用并且用户可以输入,否则它应该被禁用。
    • 是网格中的复选框吗?
    • 是网格中其他可编辑的内容,还是只有在用户选中复选框时可编辑字段才可编辑
    • 用户可以编辑外部帐户,级别 1 和级别 2。只有选中该复选框,才能编辑 RollupName。如果未选中,则用户不应对其进行编辑。这就是要求
    • 好的,我更新了。您可以做的是将网格设置为 false 并在您的字段中添加 editable: true 到您始终希望为 true 的字段。然后在 if 语句中为网格设置选项
    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    相关资源
    最近更新 更多