我有一个带过滤器的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' }
]
});
如果这是不可能的,那么有一种方法可以仅对一行运行筛选器,因为我知道哪些行已更新,所以只能对此运行它。