Как сделать ячейку в jqxGrid динамически редактируемой в зависимости от содержимого строки
Я пытаюсь сделать ячейку в jqxGrid редактируемой в зависимости от значения другого столбца в строке (с именем Editable).
{ text: "Percentage", datafield: "Percentage", columntype: 'numberinput', width: 100, cellsformat: 'p2',
editable: function (index, datafield, value, defaultvalue, column, rowdata) {
return rowdata.Editable;
}
},
Это не работает. Ячейка всегда доступна для редактирования независимо от значения rowdata.Editable
,
Замена return rowData.Editable;
с return false;
тоже не работает.
Я использую jqWidgets 3.9.0 в сочетании с JQuery 1.7.1.
Кто-нибудь может объяснить, почему это не работает и как заставить его работать?
2 ответа
Я использовал cellclick, чтобы сделать этот вид контроля.
$("#jqxGrid").on('cellclick', function (event) {
var args = event.args;
var datafield = event.args.datafield;
var rowIndex = args.rowindex;
var data = $('#jqxGrid').jqxGrid('getrowdata', rowIndex);
if(datafield == 'assign'){
if(data.assign){
$('#jqxGrid').jqxGrid('setcolumnproperty', 'datafield', 'editable', true);
}else{
$('#jqxGrid').jqxGrid('setcolumnproperty', 'datafield', 'editable', false);
}
}
});
Я получил это на работу, сделав следующее:
Замена URL-адреса в источнике данных на localdata, который ссылается на локальный массив с именем "data".
Этот массив заполняется с использованием исходного URL-адреса источника.
var data = [{}];
var source =
{
datatype: "json",
datafields: [
{ name: 'Id', type: 'number' },
{ name: 'Name', type: 'string' },
{ name: 'Percentage', type: 'string' },
{ name: 'Editable', type: 'bool' }
],
localdata: data
}
Использование свойства cellbeginedit вместо свойства editable при определении столбцов в jqxGrid:
var dataAdapter = new $.jqx.dataAdapter(source);
$("#myGrid").jqxGrid(
{
width: 800,
source: dataAdapter,
editable: true,
editmode: 'click',
selectionmode: 'singlecell',
columns: [
{ text: "Id", datafield: "Id", columntype: 'textbox', editable: false, hidden: true },
{ text: "Name", datafield: "Name", columntype: 'textbox', width: 400, editable: false },
{ text: "Percentage", datafield: "Percentage", columntype: 'numberinput', width: 100, cellsformat: 'p2',
cellbeginedit: function (row) {
return data[row].Editable;
}
},
]
});