Как настроить NatTable FilterComboBox, чтобы иметь разные DataProvider для каждого столбца - PullRequest
0 голосов
/ 11 июня 2019

В моей NatTable я использую ComboBoxFilterRowHeaderComposite, похожий на ExcelLikeFilterRowCustomTypesExample .Это работает довольно хорошо, однако фильтрация поля со списком добавляет слишком много элементов в большие таблицы, чтобы упростить фильтрацию.Однако я пытаюсь это исправить, заполняя комбо только определенными предметами;в моей таблице некоторые столбцы только для типов или операций, которые имеют ограниченное количество различных значений, и я хотел бы добавить все параметры для них.В то время как для других столбцов я бы хотел добавить только корневые элементы.

Для достижения этого, я думаю, мне нужно изменить comboBoxDataProvider, однако;для полного эффекта, который я хочу, потребуется другой поставщик данных для некоторых столбцов.

Это правильный подход?И если да, то как мне это сделать?

Вот как я сейчас настраиваю свой комбинированный список:

    ComboBoxFilterRowHeaderComposite<GroupedPerfRecord> filterRowHeaderLayer =
            new ComboBoxFilterRowHeaderComposite<GroupedPerfRecord>(
                    bodyLayerStack.getFilterList(),
                    bodyLayerStack.getBodyDataLayer(),
                    bodyLayerStack.getSortedList(),                     
                    columnPropertyAccessor, columnHeaderLayer,
                    columnHeaderDataProvider, configRegistry, false);

    final IComboBoxDataProvider comboBoxDataProvider = filterRowHeaderLayer.getComboBoxDataProvider();
    filterRowHeaderLayer.addConfiguration(new ComboBoxFilterRowConfiguration() {
        {
            this.cellEditor = new FilterRowComboBoxCellEditor(comboBoxDataProvider, 5);
            this.filterIconPainter = new ComboBoxFilterIconPainter(comboBoxDataProvider, GUIHelper.getImage("filter"), null);
        }
    });

1 Ответ

0 голосов
/ 12 июня 2019

В строке фильтра по умолчанию, в которой есть поля со списком для отдельного выбора, вы будете использовать разные IComboBoxDataProvider для каждого столбца.Но вы выбрали ComboBoxFilterRowHeaderComposite, который имеет другой механизм фильтрации сзади для поддержки множественного выбора и обработки Выбрать все , аналогично известным приложениям для работы с электронными таблицами.Так что нет встроенного механизма, который позволял бы просто настраивать желаемое поведение.

Но в ComboBoxFilterRowHeaderComposite есть конструктор, который принимает FilterRowComboBoxDataProvider в качестве параметра.Таким образом, вы можете предоставить собственную реализацию FilterRowComboBoxDataProvider (возможно, подкласс GlazedListsFilterRowComboBoxDataProvider) и реализовать желаемое поведение в getValue() на основе индекса столбца.

...