Поскольку вы преобразуете grid.getDataProvider
в ListDataProvider<Type>
, вы можете получить текущие фильтры из ListDataProvider, чтобы использовать их для запроса выборки.
Но только использование фильтра для запроса будет игнорировать порядок сортировки , Чтобы принять во внимание всю эту информацию, вам нужно использовать информацию как из dataProvider (информация о фильтре), так и из dataCommunicator (информация о сортировке)
ListDataProvider<Type> dataProvider = (ListDataProvider<Type>) grid.getDataProvider();
int totalSize = dataProvider.getItems().size();
DataCommunicator<Type> dataCommunicator = grid.getDataCommunicator();
Stream<Type> stream = dataProvider.fetch(new Query<>(
0,
totalSize,
dataCommunicator.getBackEndSorting(),
dataCommunicator.getInMemorySorting(),
dataProvider.getFilter()));
List<Type> list = stream.collect(Collectors.toList());
Редактировать: в своем ответе вы говорите, что это кажется "хакерским". Я понимаю, что вы имеете в виду, но это способ сделать это. Я думаю, что это поведение может быть доступно как publi c api на самой сетке: List<Type> list = grid.getCurrentItems();
. Сетка будет делать это внутренне, чтобы вы сами не увидели «хакерскую» часть. Я уверен, что они знают способы сделать то же самое, когда поставщик данных не является экземпляром ListDataProvider
. Вы можете открыть запрос функции для этого в github repo