Kendo Grid隐藏/显示删除按钮

5

我对Kendo MVC组件和jQuery都很陌生。

我正在构建一个Kendo网格。我希望在页面加载时隐藏网格中的删除命令。然后,当我点击页面上的按钮时,它应该可见。

Kendo网格:

@(Html.Kendo().Grid<Model>() 
    .Name("grid")
    .Columns(columns =>
    {
        columns.Bound(product => product.DESCRIPTION).Title("Description");
        columns.Bound(product => product.CODE).Title("Description");
        columns.Command(commands =>
        {
            commands.Destroy().HtmlAttributes(new { id = "buttondelete" }); 
        }).Title("Operations");
    })
    .ToolBar(toolbar =>
    {
        toolbar.Create().Text("Add Records"); 
        toolbar.Save(); 
    })
                                 
    .Editable(editable => editable.Mode(GridEditMode.InCell)) 
    .Pageable(pager => pager
        .PageSizes(true)
        .Input(true)
        .Refresh(true)
    )
    .DataSource(dataSource => dataSource
        .Ajax()
        .ServerOperation(true)
        .Events(events => events.Error("onError"))
        .Model(model =>
        {
            model.Id(product => product.ID); // Specify the property which is the unique identifier of the model
            model.Field(p => p.DESCRIPTION).Editable(false);
            model.Field(product => product.CODE).Editable(false);
        })
        .Create(create => create.Action("a", "www")) 
        .Read(read => read.Action("b", "www"))  
        .Update(update => update.Action("c", "www"))  
        .Destroy(destroy => destroy.Action("d", "www")) 
    )
)

JS:

<script type="text/javascript">

    $(document).ready(function () {
        //$("#grid").find(".k-grid-delete").hide() // hide delete button
        $("#grid").find(".k-toolbar").hide(); // hide toolbar
        $(".k-grid-delete", "#grid").hide();
    });
    
    $('#EnableEdit').click(function () {
        $("#grid").find(".k-toolbar").show();
        
        // $(".k-grid-delete", "#grid").show();
        var grid = $("#grid").data("kendoGrid");
        grid.dataSource.at(0).fields["CODE"].editable = true;
        grid.dataSource.at(0).fields["DESCRIPTION"].editable = true;
    });

</script>

编辑:根据第一条回答更改了一些内容。现在 $(“#grid”)中的$(“.k-grid-delete”).hide()无法隐藏 k.grid-delete 类。我猜测 JavaScript 在 kendo 网格创建之前已经加载。当我将其用于编辑按钮的单击功能时,它会隐藏删除按钮。

2个回答

5
如果您为每个列使用相同的id,则会有许多具有相同id的元素,这是不合法的。请尝试使用CSS类属性来标识一个delete按钮,并在创建时(页面加载)将其隐藏,然后在单击时显示它。
隐藏它们的代码:
$(".k-grid-delete", "#grid").hide();

展示它们的代码

$('#EnableEdit').click(function () {
    $(".k-grid-delete", "#grid").show();
});

这里有一个JSFiddle例子:http://jsfiddle.net/OnaBai/pSgeD/

此处无需翻译,因为这是HTML标记。

感谢您的回答,由于某些原因,$(".k-grid-delete", "#grid").hide()函数无法隐藏.k-grid-delete CSS类。我尝试在$(document).ready(function (){ });内部使用它,但仍然没有用。当我像这样使用它时:$('#EnableEdit').click(function () { $(".k-grid-delete", "#grid").hide(); });当我单击该按钮时,它会隐藏该按钮。 - balron
2
在创建 Grid 后,你需要执行 $(".k-grid-delete", "#grid").hide(),而不仅仅是在 $(document).ready(function (){ }); 中执行,因为 Grid 也会在 ready 事件中创建。你需要确保这个操作在 Grid 初始化之后执行。另一种可能性是在 dataBinding 事件中执行。 - OnaBai

3

如果要更改kendo-grid的设置,必须重新创建网格。如果您将网格绑定到远程数据,则可以注释掉“用于离线数据”的部分。

setGridReadOnly: function (gridId, isReadOnly) {

    var grid;

    grid = $("#" + gridId).data("kendoGrid");

    var myOpt = grid.options;
    myOpt.editable.create = !isReadOnly;
    myOpt.editable.destroy = !isReadOnly;
    myOpt.editable.update = !isReadOnly;
    if (isReadOnly == true)
        myOpt.editable.mode = "null";
    else
        myOpt.editable.mode = "inline";

    //for offlide data.
    var data = grid._data;
    //

    grid.destroy();

    $("#" + gridId).kendoGrid(myOpt).data("kendoGrid");

    //for offlide data.
    $("#" + gridId).data("kendoGrid").dataSource.data(data);
    //

    if (isReadOnly == true) {
        $("#" + gridId).find(".k-grid-delete").hide();
        $("#" + gridId).find(".k-grid-edit").hide();
        $("#" + gridId).find(".k-grid-add").hide();
    } else {
        $("#" + gridId).find(".k-grid-delete").show();
        $("#" + gridId).find(".k-grid-edit").show();
        $("#" + gridId).find(".k-grid-add").show();
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接