设置单元格值时在jqxGrid中应用过滤器

时间:2019-01-11 09:39:35

标签: javascript jqxgrid

我有一个带过滤器的jqxGrid。通过调用setCellValue更改数据时,仅当该行尚未被过滤掉时才应用过滤器。

因此,如果我有一个过滤器说该值应包含“ a”,并且将其更改为“ Bntoni”,它将消失,但是将其设置回“ Antoni”不会将其恢复。如果我强制applyFilters,它将返回。

示例 http://jsfiddle.net/smz72e8x/-将名称上的过滤器设置为包含“ a”,然后按b按钮。该行将消失,按a按钮。该行不会像我期望的那样重新出现。

$(document).on("click", ".a", 
    function() {
    $("#jqxgrid").jqxGrid('setcellvalue', 2, 'name', 'Antoni');
  }
); 

$(document).on("click", ".b", 
    function() {
    $("#jqxgrid").jqxGrid('setcellvalue', 2, 'name', 'Bntoni');
  }
); 

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

 var dataAdapter = new $.jqx.dataAdapter(source);

$("#jqxgrid").jqxGrid(
  {
    width: 850,
    source: dataAdapter,
    filterable: true,
    // cellValue - cell's current value, row data - row's data, data field - column's data field, filterGroup - group of filters, defaultFilterResult - the built-in boolean evaluated result-
    filter: function(cellValue, rowData, dataField, filterGroup, defaultFilterResult)
    {
      // implements a custom filter for the "name" field. 
      if (dataField === "name") {
        var filters = filterGroup.getfilters();
        for (var i = 0; i < filters.length; i++) {
          var filter = filters[i];
          var filterValue = filter.value;
          var filterCondition = filter.condition;
          var filterType = filter.type;

          if (cellValue.indexOf("Antoni") >= 0) {
            return true;
          }
          if (cellValue.indexOf("Nancy") >= 0) {
            return true;
          }
        }

        return false;
      }
    },
    selectionmode: 'multiplecellsextended',
    columns: [
      { text: 'Name', columntype: 'textbox', filtertype: 'input', datafield: 'name', width: 215 },
      {
        text: 'Product', filtertype: 'checkedlist', datafield: 'productname', width: 220
      },
      { text: 'Available', datafield: 'available', columntype: 'checkbox', filtertype: 'bool', width: 67 },
      { text: 'Ship Date', datafield: 'date', filtertype: 'range', width: 210, cellsalign: 'right', cellsformat: 'd' },
      { text: 'Qty.', datafield: 'quantity', filtertype: 'number',  cellsalign: 'right' }
    ]
  });

如果这是不可能的,那么有一种方法可以仅对一行运行筛选器,因为我知道哪些行已更新,所以只能对此运行它。

0 个答案:

没有答案