Редактируемые свойства jqxgrid на основе значения в другом столбце

Со ссылкой на код, доступный по данной ссылке ниже http://jsfiddle.net/tzHXR/.

var data = generatedata(500);
 var source = {
     localdata: data,
     datafields: [{
         name: 'firstname',
         type: 'string'
     }, {
         name: 'lastname',
         type: 'string'
     }, {
         name: 'productname',
         type: 'string'
     }, {
         name: 'date',
         type: 'date'
     }, {
         name: 'quantity',
         type: 'number'
     }, {
         name: 'price',
         type: 'number'
     }],
     datatype: "array"
 };

 var adapter = new $.jqx.dataAdapter(source);
 $("#jqxgrid").jqxGrid({
     width: 500,
     theme: 'energyblue',
     editable: true,
     source: adapter,
     sortable: true,
     columns: [{
         text: 'First Name',
         datafield: 'firstname',
         width: 90
     }, {
         text: 'Last Name',
         datafield: 'lastname',
         width: 90
     }, {
         text: 'Product',
         datafield: 'productname',
         width: 170
     }, {
         text: 'Order Date',
         datafield: 'date',
         width: 160,
         cellsformat: 'dd-MMMM-yyyy'
     }, {
         text: 'Quantity',
         datafield: 'quantity',
         width: 80,
         cellsalign: 'right'
     }, {
         text: 'Unit Price',
         datafield: 'price',
         cellsalign: 'right',
         cellsformat: 'c2'
     }]
 });

Как установить свойство столбца количества и цены столбца на основе значения даты заказа ??

Example: 
cellbeginedit: function (row) {
    var Orderdate = $("#jqxgrid1").jqxGrid('getcellvalue', row, 'date');
    if (Orderdate < '1-June-2018'){
    $('#jqxgrid').jqxGrid('setcolumnproperty', 'quantity', 'editable', false);  
    $('#jqxgrid').jqxGrid('setcolumnproperty', 'price', 'editable', false);
    }

}

В этом конкретном случае все столбцы по умолчанию имеют editable:true в качестве свойств по умолчанию. Однако, как вы можете видеть в данном примере, возможно ли настроить редактируемые свойства столбца на основе значения из другого столбца.


person ericsen oei    schedule 04.06.2018    source источник


Ответы (1)


Итак, после нескольких попыток я наконец понял, как это сделать, используя «cellselect».

$("#jqxgrid").on('cellselect', function (event) {
    $('#jqxgrid1').jqxGrid('setcolumnproperty','quantity', 'editable', true);
    $('#jqxgrid1').jqxGrid('setcolumnproperty','price', 'editable',true);
    var datafield = event.args.datafield;
    var rowindex = event.args.rowindex;
    var date = $("#jqxgrid").jqxGrid('getcellvalue',rowindex,'date');
    if (date < '1-June-2018' ){
        $('#jqxgrid1').jqxGrid('setcolumnproperty','quantity', 'editable', false);
        $('#jqxgrid1').jqxGrid('setcolumnproperty','price', 'editable', false);
    }

Одно интересное наблюдение, которое у меня было, заключается в том, что важно сбросить свойство столбца по умолчанию для каждого события 'cellselect'. если нет сброса, влияние первого события «cellselect» будет распространяться на последующее событие «cellselect», что приведет к нежелательному результату.

Делая это, можно динамически решать, какой столбец можно редактировать для другой строки.

person ericsen oei    schedule 06.06.2018