ag-grid,为整个数据集客户端提供适当的 paging/filtering/sorting
ag-grid, provide entire dataset client side with proper paging/filtering/sorting
我正在使用数据源 class 向网格提供数据,并且在 getRows() 函数中我正在为当前页面计算 return 的行数。这个问题是 filtering/sorting 然后只适用于当前页面。我找不到任何方法来使用 getRows() 函数中的网格构建排序过滤,通过过滤整个数据集来 return 正确的数据。这似乎是一个基本功能。数据表和 PrimeNG 网格都是开箱即用的。我是不是遗漏了什么,或者 ag-grid 真的根本不支持这个吗?实际上,如果您希望 filtering/sorting 应用于整个数据集(这是最流行的用例 imo),似乎没有办法将分页与 filtering/sorting 函数中内置的网格一起使用)
还没有,在他们的 github 页面上有一个针对此 enhancement
的公开请求
在该页面上,有一个建议的解决方法,即为每一列创建一个新的排序和筛选函数。考虑到这会变得多么复杂和具体,我使用 Slave/Master feature. Here is a jsfiddle 创建了一个不同的解决方法用于演示目的。
它的工作原理是有一个只显示 header 的幽灵网格。这个幽灵网格将处理 ag-grid 中固有的所有排序和过滤,然后它将 sorted/filtered 数据传递给僵尸网格。
相关代码(不包括最初设置分页的代码):
HTML:
<div id="ghostGrid" style="height: 25px" class="ag-fresh"></div>
<div id="zombieGrid" style="height: 500px;" class="ag-fresh"></div>
ghostGrid高度需要为header的高度(默认为25px)
CSS:
.ag-bl-full-height {
overflow: unset;
}
.ag-menu {
top: 23px !important;
z-index: 99;
}
此 CSS 是使过滤器菜单在正确位置弹出所必需的(顶部 属性 可能需要在您的应用程序中使用)
JS:
var zombieGridOptions = {
columnDefs: columnDefs,
rowData: null,
headerHeight:0,
rowModelType: 'pagination',
paginationPageSize: 50,
slaveGrids: [],
};
var ghostGridOptions = {
columnDefs: columnDefs,
rowData: null,
enableFilter: true,
enableSorting: true,
slaveGrids: [],
onFilterChanged: updateZombieAfterSortAndFilter,
onSortChanged: updateZombieAfterSortAndFilter
};
function updateZombieAfterSortAndFilter(){
sortedAndFilteredData = [];
ghostGridOptions.api.getModel().rowsToDisplay.forEach(e=>sortedAndFilteredData.push(e.data))
setRowData(sortedAndFilteredData)
}
ghostGridOptions.slaveGrids.push(zombieGridOptions);
zombieGridOptions.slaveGrids.push(ghostGridOptions);
我正在使用数据源 class 向网格提供数据,并且在 getRows() 函数中我正在为当前页面计算 return 的行数。这个问题是 filtering/sorting 然后只适用于当前页面。我找不到任何方法来使用 getRows() 函数中的网格构建排序过滤,通过过滤整个数据集来 return 正确的数据。这似乎是一个基本功能。数据表和 PrimeNG 网格都是开箱即用的。我是不是遗漏了什么,或者 ag-grid 真的根本不支持这个吗?实际上,如果您希望 filtering/sorting 应用于整个数据集(这是最流行的用例 imo),似乎没有办法将分页与 filtering/sorting 函数中内置的网格一起使用)
还没有,在他们的 github 页面上有一个针对此 enhancement
的公开请求在该页面上,有一个建议的解决方法,即为每一列创建一个新的排序和筛选函数。考虑到这会变得多么复杂和具体,我使用 Slave/Master feature. Here is a jsfiddle 创建了一个不同的解决方法用于演示目的。
它的工作原理是有一个只显示 header 的幽灵网格。这个幽灵网格将处理 ag-grid 中固有的所有排序和过滤,然后它将 sorted/filtered 数据传递给僵尸网格。
相关代码(不包括最初设置分页的代码):
HTML:
<div id="ghostGrid" style="height: 25px" class="ag-fresh"></div>
<div id="zombieGrid" style="height: 500px;" class="ag-fresh"></div>
ghostGrid高度需要为header的高度(默认为25px)
CSS:
.ag-bl-full-height {
overflow: unset;
}
.ag-menu {
top: 23px !important;
z-index: 99;
}
此 CSS 是使过滤器菜单在正确位置弹出所必需的(顶部 属性 可能需要在您的应用程序中使用)
JS:
var zombieGridOptions = {
columnDefs: columnDefs,
rowData: null,
headerHeight:0,
rowModelType: 'pagination',
paginationPageSize: 50,
slaveGrids: [],
};
var ghostGridOptions = {
columnDefs: columnDefs,
rowData: null,
enableFilter: true,
enableSorting: true,
slaveGrids: [],
onFilterChanged: updateZombieAfterSortAndFilter,
onSortChanged: updateZombieAfterSortAndFilter
};
function updateZombieAfterSortAndFilter(){
sortedAndFilteredData = [];
ghostGridOptions.api.getModel().rowsToDisplay.forEach(e=>sortedAndFilteredData.push(e.data))
setRowData(sortedAndFilteredData)
}
ghostGridOptions.slaveGrids.push(zombieGridOptions);
zombieGridOptions.slaveGrids.push(ghostGridOptions);