2016-11-29 6 views
3

各フィルタの選択のための行数をカウントし、そのカウント数によって多分ソート選択肢降順)。 これは、デフォルトで次のようになります。銀グリッド:(Iがセットフィルタの各フィルタの選択に次の行</strong>の<strong>カウントを表示したい私のAG-グリッドで

enter image description here

私は選択肢が

  • として表示させたいすべての(88)
  • ケイティ・テイラー(2)を選択
  • ダレンサザーランド(1)
  • ジョンジョー・ネヴィン(1)
  • バラク・オバマ(0)
  • ...

それらのカウントを取得する(そしておそらくそれに応じて選択肢を並べ替え)するための最も効率的な方法は何ですか他のフィールド(もしあれば)に既に設定されているフィルタを考慮に入れて、行データから?

答えて

1

あなたの列フィールドが「名前」で、あなたがマップを構築しようとすると、フィルタの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; 
}; 

あなたがめざしuldはupdateCountryCountsを呼び出して、データが変更されたとき(新しい/更新されたデータか、フィルタが更新された時など)更新する必要がありますが、これはあなたのユースケースでうまくいくはずです

関連する問題