在我的ag-grid中,我想在集合过滤器中的每个过滤器选项旁边显示行数,并且可能按该计数<降序排序排序。 这是默认情况下的样子:
我希望选项显示为
考虑到已在其他字段中设置的过滤器(如果有),从行数据中获取这些计数(并可能相应地对选项进行排序)的最有效方法是什么?
答案 0 :(得分:2)
假设您的列字段是“name”,您可以尝试构建一个地图并在过滤器cellRenderer中引用它:
var nameValueToCount = {};
function updateNameValueCounts() {
nameValueToCount = {};
gridOptions.api.forEachNodeAfterFilter((node) => {
if(!nameValueToCount.hasOwnProperty(node.data.name)) {
nameValueToCount[node.data.name] = 1;
} else {
nameValueToCount[node.data.name] = nameValueToCount[node.data.name] + 1;
}
});
}
你的专栏def看起来像这样:
{
headerName: "Name",
field: "name",
width: 120,
filter: 'set',
filterParams: {
cellRenderer: NameFilterCellRenderer
}
},
最后,NameFilterCellRenderer
看起来像这样:
function NameFilterCellRenderer() {
}
NameFilterCellRenderer.prototype.init = function (params) {
this.value = params.value;
this.eGui = document.createElement('span');
this.eGui.appendChild(document.createTextNode(this.value + " (" + nameValueToCount[params.value] + ")"));
};
NameFilterCellRenderer.prototype.getGui = function () {
return this.eGui;
};
您需要确保在数据更改时调用updateCountryCounts
来更新它(使用新的/更新的数据,或更新过滤器等),但这应该适用于您的用例我认为