Ag-grid:计算每个过滤器选择的行数

时间:2016-11-29 12:15:08

标签: ag-grid

在我的ag-grid中,我想在集合过滤器中的每个过滤器选项旁边显示行数,并且可能按该计数<降序排序排序。 这是默认情况下的样子:

enter image description here

我希望选项显示为

  • 全选(88)
  • 凯蒂泰勒(2)
  • Darren Sutherland (1)
  • John Joe Nevin (1)
  • 巴拉克奥巴马(0)
  • ...

考虑到已在其他字段中设置的过滤器(如果有),从行数据中获取这些计数(并可能相应地对选项进行排序)的最有效方法是什么?

1 个答案:

答案 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来更新它(使用新的/更新的数据,或更新过滤器等),但这应该适用于您的用例我认为