使用 jQxGrid,
我正在尝试组合列
firstname
和 lastname
,这样,如果用户在 name
上进行筛选,它实际上会搜索 firstname
或 lastname
。'updatebounddata'
会将这些信息发送到服务器,我可以根据datafields
返回适当的值,但是过滤器的datafields
需要变成firstname
,lastname
。
在下面的示例中,我希望一旦
const ex
过滤器更新为 const ex1
和 name
过滤器,firstname
和 lastname
将具有不同的值。
但没有发生任何更新。 :/
(这是基于他们论坛上的现有帖子,但我无法在那里注册,也不知道还能去哪里..)
HTML:
<div id='jqxWidget'>
<div id="jqxgrid"></div>
</div>
Javascript:
var data = generatedata(500);
var source = {
localdata: data,
datafields: [
{
name: "firstname",
type: "string"
},
{
name: "lastname",
type: "string"
},
{
name: "name",
type: "string",
map: "firstname, lastname"
}
],
datatype: "array",
beforeLoadComplete: function (records) {
const data = new Array();
for (var i = 0; i < records.length; i++) {
const current = records[i];
current.name = `${current.firstname} ${current.lastname}`;
data.push(current);
}
return data;
},
filter: function (filters, b, c) {
updateFilters();
}
};
var adapter = new $.jqx.dataAdapter(source);
$("#jqxgrid").jqxGrid({
width: "100%",
theme: "energyblue",
source: adapter,
filterable: true,
showfilterrow: true,
columns: [
{
text: "Name",
datafield: "name",
columngroup: "Name",
width: 1190
}
]
});
function updateFilters() {
// Take snapshot of active filters
debugger;
const ex = $("#jqxgrid").jqxGrid("getfilterinformation");
if (ex.length > 1) {
$("#jqxgrid").jqxGrid("updatebounddata");
} else {
const activeFilters = [];
$.each(
$("#jqxgrid").jqxGrid("getfilterinformation"),
(index, filterInfo) => {
if (filterInfo.datafield === "name") {
let value = filterInfo.filter.filtervalue
? filterInfo.filter.filtervalue
: filterInfo.filter.getfilters()[0].value;
let condition = filterInfo.filter.filtervalue
? filterInfo.filter.comparisonoperator
: filterInfo.filter.getfilters()[0].condition;
activeFilters.push({
columnName: "firstname",
filterValue: value.toLowerCase(),
filterCondition: condition.toLowerCase()
});
activeFilters.push({
columnName: "lastname",
filterValue: value.toLowerCase(),
filterCondition: condition.toLowerCase()
});
}
}
);
//$("#jqxgrid").jqxGrid("clearfilters");
// $("#jqxgrid").jqxGrid("removefilter", 'name');
// Update bound data / reset init row etc
// Reapply filters
activeFilters.forEach((filter) => {
const filtergroup = new $.jqx.filter();
filtergroup.operator = "or";
const filtervalue = filter.filterValue;
const filtercondition = filter.filterCondition;
const filter1 = filtergroup.createfilter(
"stringfilter",
filtervalue,
filtercondition
);
filtergroup.addfilter(1, filter1);
$("#jqxgrid").jqxGrid("addfilter", filter.columnName, filtergroup);
});
const ex1 = $("#jqxgrid").jqxGrid("getfilterinformation");
$("#jqxgrid").jqxGrid("updatebounddata");
//$("#jqxgrid").jqxGrid("refreshfilterrow");
}
}
这似乎适用于 jQXWidgets v19。
const ex
、const ex1
的值不同。
这可能是我使用的 jqxWidgets 库(v12)中的一个错误。
我认为该错误与:-
https://www.jqwidgets.com/community/topic/filtering-issues-when-mixing-addfilter-and-filter-row/