【问题标题】:Disable command by data condition in kendogrid通过 kendogrid 中的数据条件禁用命令
【发布时间】:2016-05-02 14:02:58
【问题描述】:

如何通过给定的布尔值禁用一行上的删除按钮?

鉴于此示例模型:

public class Example
{
    public bool CanDeleted {get; set;} //Delete Button only if true
    //...        
}

KendoGrid<Example>:

columns.Command(c => c.Destroy()); //I want something something like m => m.CanDeleted

【问题讨论】:

  • @Eldho,是的,我已经看过了。但看起来,这会禁用/启用服务器端的所有行。我担心的是基于数据的客户端,而不是 ViewBag/ViewModel。
  • 这个也看看telerik.com/forums/…
  • 谢谢@Eldho。这看起来不错:)
  • 试试看,让我知道您的反馈

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


【解决方案1】:

感谢@Eldho,他将我指向right solution

Javascript:

function onDataBound() {
    var grid = $("#GridID").data("kendoGrid"); //Set GridID
    var gridData = grid.dataSource.view();
    for (var i = 0; i < gridData.length; i++) {
        var gridItem = gridData[i];
        if (!gridItem.CanBeDeleted) { //Condition
            grid.table.find("tr[data-uid='" + gridItem.uid + "']").find(".k-grid-delete").hide(); //Remove button
        }

        //Second Iteration, if we have grouped columns
        if (gridItem.items) {
            for (var j = 0; j < gridItem.items.length; j++) {
                var gridSubItem = gridItem.items[j];
                if (!gridSubItem.CanBeDeleted) { //Condtion
                    grid.table.find("tr[data-uid='" + gridSubItem.uid + "']").find(".k-grid-delete").hide(); //Remove button
                }
            }
        }
    }
}

KendoGrid 助手:

.Events(e => e.DataBound("onDataBound"))

查看我的other answer 以获得更好的解决方案。

【讨论】:

    【解决方案2】:

    在对 MVC 有了更多了解后,我发现了一个明显更好的解决方案,使用扩展方法:

    public static class KendoExtensions
    {
        public static GridTemplateColumnBuilder<TModel> DestroyConditional<TModel>(this GridColumnFactory<TModel> factory, Expression<Func<TModel, bool>> expression)
            where TModel : class
        {
            var template = "# if (" + ExpressionHelper.GetExpressionText(expression) +") { # <a class=\"k-button k-button-icontext k-grid-delete\"><span class=\"k-icon k-delete\"></span>" + TextStrings.Delete + "</a># } #";
    
            return factory.Template(e => "").ClientTemplate(template).Title("");
        }
    }
    

    请随意将TextStrings.Delete 替换为您感觉良好的任何内容。我的 T4 本地化逻辑很简单。

    现在在您的网格定义中,它真的只是:

    .Columns(columns =>
    {
        columns.DestroyConditional(c => c.CanBeDeleted).Width(120);
    }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多