使用ag-grid,有什么办法可以始终在列A,B和C上应用多重排序吗?我仍然希望用户能够设置排序选项,但我希望始终对某些列应用排序。理想情况下,我还希望用户仍然能够在他/她应用的排序设置中选择这些列-因此,基本上默认的排序逻辑是
(如果用户未手动选择,则列A-如果用户未手动选择,则列B-如果用户未手动选择,则列C->用户按指定顺序选择排序列)>
使用ag-grid可以吗?现在,我有一个onSortChanged函数,如果排序模型尚不包含A,B,C列,则将其插入到排序模型的前面,但是由于某种原因,这与我提到的允许用户仍然可以手动选择A,B或C列。
(在Angular 6中使用ag-grid)
这是我当前在网格的gridOptions的onSortChanged函数中所做的事情:
gridOptions = {
onSortChanged: () => {
let currentSortModel = this.gridApi.getSortModel();
let levelFound = currentSortModel.find(obj => { return obj['colId'] == 'level'; });
let transferLevelFound = currentSortModel.find(obj => { return obj['colId'] == 'transferSortOrder'; });
let dateFound = currentSortModel.find(obj => { return obj['colId'] == 'dateReceived'; });
let poNumberFound = currentSortModel.find(obj => { return obj['colId'] == 'poNumber'; });
if(!levelFound) { currentSortModel.unshift({ colId: "level", sort: "asc" }); }
if(!transferLevelFound) { currentSortModel.push({ colId: "transferSortOrder", sort: "asc" }); }
if(!dateFound) { currentSortModel.push({ colId: "dateReceived", sort: "desc" }); }
if(!poNumberFound) { currentSortModel.push({ colId: "poNumber", sort: "asc" }); }
if ((!levelFound) || (!transferLevelFound) || (!dateFound) || (!poNumberFound)) { this.gridApi.setSortModel(currentSortModel); }
}
}
因此,每次更改排序时,我都会在排序模型中查找默认情况下要排序的每个列,如果不存在,则添加模型中缺少的任何列。这适用于每种情况,除非用户实际上要按不是默认顺序的顺序按这些默认列之一进行排序。在这种情况下,用户只能按升序而不是降序对这些默认列之一进行排序。