有没有办法从kendo网格中检索所有可编辑的单元格?

时间:2016-05-24 11:59:48

标签: kendo-grid

我有一个剑道网格,根据以下条件可以编辑字段:

 //var isEditable= some condition

 fields: {
             Id: { type: "int", editable: false },
             Amount: {type: "number", editable: isEditable},
         }

我希望获得所有可编辑的单元格,并在显示之前对其进行操作。

目前我正在使用dataBound事件迭代行和单元格并找到所需的单元格

dataBound: function(e){
            var rows = e.sender.tbody.children();
            for (var j = 0; j < rows.length; j++) {
            var row = $(rows[j]);
            if (isEditable){
                   var cell1 = row.children().eq("hardcoded index");
                   var cell2 = row.children().eq("hardcoded index 2");
                   var cell3 = row.children().eq("hardcoded index 3");
                   ......
                   ......
                   // perform action
            }
 }

有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

由于您希望在显示之前对可编辑元素执行某些操作,因此我将使用模板来完成此操作。下面是一个示例,如果Amount字段可编辑,则将背景颜色变为红色:

<script id="editableTemplate" type="text/x-kendo-template">
  #if (Editable)  { #
    <div style='background-color:red'>#=Amount#</div> 
  # } else { #
    <div>#=Amount#</div> 
  # } #
<script>

另一种解决方法是通过将模板包装在函数中来获取参数:

function foo(isEdit, value) {
    if(isEdit){
        return "<div style='background-color:red'>" + value + "</div>";
    } else {
        return "<div>" + value + "</div>";
    }
}

然后,您可以将列模板设置为:

{
    field: "Amount",
    type: "number",
    template: function(data) {
        return kendo.template("#=foo(isEditable, Amount)#")
    },
    editable: isEditable
}

Here is a basic fiddle