У меня есть следующее требование.
- Отображение данных в таблице
- Нажатие на флажок отфильтровывает отображаемые в данный момент строки по какому-либо условию.
- Повторное нажатие на флажок возвращает внешний вид данных в предыдущее состояние.
Для этого я пересмотрел метод rowQualify в моем ViewObject, который представляет собой простой объект представления на основе SQL для применения моей пользовательской логики фильтра.
Когда пользователь устанавливает флажок, я обновляю данные объекта представления, чтобы применить фильтр
viewObject.setDoFiltering(true);
viewObject.setQueryMode(ViewObject.QUERY_MODE_SCAN_VIEW_ROWS);
viewObject.executeQuery();
Он работает отлично, набор данных обновляется без взаимодействия с базой данных, а также применяется моя пользовательская логика фильтра.
Но когда мне нужно отменить фильтр, это не сработает, потому что итератор больше не содержит предыдущих строк, и я могу загрузить их только из базы данных, но это означает, что я могу потерять свои изменения, уже сделанные для просмотра строк объекта.
Итак, когда я делаю
viewObject.setDoFiltering(false);
viewObject.setQueryMode(ViewObject.QUERY_MODE_SCAN_VIEW_ROWS);
viewObject.executeQuery();
Он вернет мне те строки, которые были отображены в предыдущий раз. Если я сделаю
viewObject.setDoFiltering(true);
viewObject.setQueryMode(ViewObject.QUERY_MODE_SCAN_DATABASE_TABLES);
viewObject.executeQuery();
Он вернет мне все строки, но я потеряю уже внесенные изменения для просмотра строк объекта.
Мои вопросы, как этого избежать? Может быть, есть другой способ сделать это? Может быть, можно что-то сделать с RichTable, чтобы сказать ему, как фильтровать строки в памяти.
Любые советы тепло appricated!