jqxgrid 基于另一列上的值的可编辑属性

Posted

技术标签:

【中文标题】jqxgrid 基于另一列上的值的可编辑属性【英文标题】:jqxgrid editable properties based on a value on another column 【发布时间】:2018-11-13 12:53:14 【问题描述】:

参考下面给定链接中提供的代码 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'
     ]
 );

如何根据Order Date的值设置列数量和价格的列属性??

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 作为默认属性。但是,正如您在给定示例中看到的那样,是否可以根据另一列的值设置列的可编辑属性。

【问题讨论】:

【参考方案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' 事件,从而产生不良结果。

通过这样做,可以动态决定可以为不同的行编辑哪一列

【讨论】:

以上是关于jqxgrid 基于另一列上的值的可编辑属性的主要内容,如果未能解决你的问题,请参考以下文章

选择一列上的值在另一列上具有相同的一组值

两列上的 DENSE_RANK,其中一列是不同的值,另一列是重复的

基于另一列的最大值的列上的 SQL 内连接 [重复]

当另一列具有特定值时,列上的 NOT NULL 约束

Kentico - 子页面上的可编辑 WebPartZones?

在另一列上分组后查找列值的最大出现次数