KendoUI Grid:如何以编程方式使特定列不可编辑

时间:2014-06-30 15:42:46

标签: javascript kendo-ui kendo-grid

我想以编程方式使KendoUI Grid列不可编辑。

哪些列不可编辑的信息,我将在创建网格后 并在我的应用程序中填充数据。这就是为什么我必须以编程方式设置它。

首先我以这种方式创建了网格:

var dataSource = new kendo.data.DataSource({
    schema: {
        model: {
            fields: {
                field1: {
                   editable: true,
                },
                field2: {
                   editable: true,
                }
            }
        }
    }
});

$(domNode).kendoGrid({
    editable: true,
    dataSource: dataSource,
    columns: [{
            field: 'field1',
            title: 'First column'
        },
        {
            field: 'field2',
            title: 'Second column'
        }
    ]
});

然后我添加了一些数据(我知道在这里显示它不是必要的):

var grid = $(domNode).data('kendoGrid'); 

grid.dataSource.add({
    field1: 'Some value',
    field2: 'Some other value'
});

稍后在我的应用程序中,我将获得哪些列不可编辑的信息。然后我尝试了以下内容:

grid.dataSource.options.schema.model.fields['field1'].editable = false;

grid.dataSource.read(); // No changes, cloumn is still editable
grid.refresh(); // No changes, cloumn is still editable
grid.setDataSouce(grid.dataSouce); // No changes, cloumn is still editable

我很绝望。什么是以编程方式使列不可编辑的正确方法?

1 个答案:

答案 0 :(得分:0)

我建议采用两种方法:

  1. 为每个字段定义editor函数,并在调用时决定如何呈现它,如果应该是input或普通div / span。这可能需要做很多工作,因为您需要为每个可以编辑且不可编辑的字段重复此操作,具体取决于您收到的信息。
  2. 每当您收到有关哪些字段可编辑的信息时,请创建一个新的grid,其中包含有关哪些字段可编辑哪些字段以及哪些字段不可编辑的实际信息。您可以选择销毁之前的grid定义或仅hide定义,并在同一位置显示新的定义。
  3. 除非只有少数字段可以编辑,否则我会采用第二种方法。