Я использую класс источника данных для предоставления данных в сетку, а в функции getRows () я вычисляю строки, которые нужно вернуть для текущей страницы. Проблема в том, что фильтрация / сортировка применяется только на текущей странице. Я не могу найти способ использовать сборку сеток для сортировки и фильтрации в функции getRows (), чтобы вернуть правильные данные путем фильтрации всего набора данных. Похоже, это будет основная функция. Таблицы данных и сетка PrimeNG делают это из коробки. Я что-то упустил или ag-grid действительно не поддерживает это? Как бы то ни было, кажется, что нет способа использовать разбиение на страницы вместе с сетками, встроенными в функции фильтрации / сортировки, если вы хотите, чтобы фильтрация / сортировка применялась ко всему набору данных (что является наиболее популярным вариантом использования imo)
ag-grid, обеспечивает клиентскую сторону всего набора данных с правильным разбиением на страницы / фильтрацией / сортировкой
Ответы (1)
Еще нет, на их странице github есть открытый запрос на это улучшение
На этой странице предлагается обходной путь путем создания новой функции сортировки и фильтрации для каждого столбца. Учитывая, насколько сложным и конкретным может быть это решение, я создал другой обходной путь, используя Slave / Master. Вот jsfiddle для демонстрационных целей.
Это работает за счет призрачной сетки, которая показывает только заголовок. Эта призрачная сетка будет обрабатывать всю сортировку и фильтрацию, присущую ag-сетке, затем она будет передавать отсортированные / отфильтрованные данные в сетку зомби.
Соответствующий код (не включает в себя то, что изначально потребовалось для настройки разбивки на страницы):
HTML:
<div id="ghostGrid" style="height: 25px" class="ag-fresh"></div>
<div id="zombieGrid" style="height: 500px;" class="ag-fresh"></div>
Высота ghostGrid должна равняться высоте заголовка (по умолчанию 25 пикселей)
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);
getModel(), setQuickFilter(), setSortModel()
Не уверен, насколько это будет сложно, я попытаюсь придумать jsfiddle позже. (возможно, функция ведомого / ведущего будет как-то полезна?)
- person Jarod Moser; 25.01.2017
rowData
ag-grid? или вы используете функцию разбиения на страницы? - person Jarod Moser   schedule 25.01.2017