2014-08-13 4 views
0

У меня есть сетка Кендо, в которой у меня есть флажок в последнем столбце, и я привязываю эту сетку со стороны сервера (заполняя данные с сервера) и тем, что значение checkbox также поступает с сервера. Я хочу отключить всю строку, в которой значение флажка истинно, т.е. оно отмечено и хочет разрешить редактирование, когда значение флажка false, т. е. оно не проверено. Мой код выглядит следующим образом:Отключить строку в сетке кендо на основании условия

@(Html.Kendo().Grid(Model) 
    .Name("UpdatedHeadGrid") 
     .Columns(columns => 
     { 
      columns.Bound(p => p.ID).Hidden(true).ClientTemplate("#= ID#" + "<input type='hidden' class='ID' value='#=ID#' />").Width(10); 
      columns.Bound(p => p.IsAllocated).HeaderHtmlAttributes(new { title = "Allocatable" }).Title("Allocatable").ClientTemplate("<input type='checkbox' ${ IsAllocated == true ? checked='checked' : ''} class='IsAllocated' value='#=data.IsAllocated#' style='width:50px;' />").Width(50).HtmlAttributes(new { style = "text-align: center;vertical-align: middle;"}); 
      columns.Bound(p => p.Total).HeaderHtmlAttributes(new { title = "Total Amount" }).Title("Total").ClientTemplate("<input type='text' disabled='disabled' class='Total' value='#=data.Total#' style='width:65px;' />").Width(60).HtmlAttributes(new { style = "text-align:right", onclick = "DisableEdit(this)" }); 
      .Editable(editable => editable.Mode(GridEditMode.InCell)) 
    .Events(e => 
    { 
     e.DataBound("onRowBound"); 

     e.Edit("onEdit"); 
    })  
    .PageSize(15) 
    .Resizable(resize => resize.Columns(true)) 
) 

Для этого я написал функцию редактирования т.е. onEdit функции следующим образом:

<script> 
    function onEdit(e) { 
     var fieldName12548 = e.container.find('input[type="checkbox"][name="IsAllocated"]').attr("value"); 
     if (fieldName12548 === "Total") { 
      this.closeCell(); 
     } 
    } 
</script> 

Здесь вместо только колонки с имя_поля = «Total» я должен отключить все строки.

Для редактирования более одного столбца

var fieldName = e.container.find("input").attr("name"); 
    if (fieldName === "AccountTransactionItemDescription" && fieldName === "Identifier" && fieldName === "TradeOrNonTrade" && fieldName === "EntityName") 
    { 
    this.closeCell(); 
    } 

, но здесь это не работает, может быть, это может относиться только one.So, что будет решение для этого?

ответ

2

Вместо использования jQuery для определения значения ввода, я предлагаю вам использовать model поле аргумента обработчика события e.

Так что вы должны сделать:

<script> 
    function onEdit(e) { 
     if (e.model.IsAllocated) { 
      this.closeCell(); 
     } 
    } 
</script> 

в действии здесь: http://jsfiddle.net/OnaBai/ry82wcvc/

+0

Это отключит все поля строки, но если предположим, что я хочу, чтобы отключить только одно поле, то что делать? Спасибо за это – SantyEssac

+0

Пожалуйста, предложите ..... – SantyEssac

+0

Используйте 'var fieldName = grid.columns [e.container.index()]. ​​Поле;' для поиска имени поля редактируемого столбца. Проверьте http://jsfiddle.net/OnaBai/ry82wcvc/2/ – OnaBai

Смежные вопросы