2016-05-02 9 views
3

行の削除ボタンを特定のブール値で無効にする方法を教えてください。kendogridのデータ条件によるコマンドを無効にする

を考えると、この例のモデル:

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

KendoGrid<Example>:@Eldhoへ

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

あなたはこのhttp://stackoverflow.com/a/19840309/1876572 – Eldho

+0

@Eldhoを見なかった、はい私はそれを見てとっています。しかし、これは、このように/これは、サーバー側のすべての行を無効/有効にします。私の懸念事項は、ViewBag/ViewModelではなく、データに基づくクライアント側についてです。 –

+1

これも見てくださいhttp://www.telerik.com/forums/how-do-i-conditional-set-the-visibility-of-the-command-edit-button-on-a-row-by -row-basis- – Eldho

答えて

0

MVCについてもう少し知識を持って状況を確認した後、私は、拡張メソッドを使用して、signficantよりよい解決策を見つけた:

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); 
})) 
1

おかげで、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ヘルパー:より良いソリューションのための私のother answer

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

ルック。

関連する問題