如何将 NatTable FilterComboBox 配置为对每列具有不同的数据提供程序



在我的NatTable中,我正在使用类似于ExcelLikeFilterRowCustomTypesExample的ComboBoxFilterRowHeaderComposite它运行良好,但是组合框筛选在大型表中添加了太多项目,以便于筛选。但是,我正在尝试通过仅用某些项目填充组合来解决此问题;在我的表中,有些列仅用于具有有限数量的不同值的类型或操作,我想为这些类型或操作添加所有选项。而对于其他列,我只想添加根项。

但是,为了实现这一点,我认为我需要修改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);
        }
    });

使用具有单选组合框的默认筛选器行,您将对每列使用不同的IComboBoxDataProvider。但是,您选择了后面具有不同过滤机制的ComboBoxFilterRowHeaderComposite,以支持多选和处理"全选">,类似于众所周知的电子表格应用程序。因此,没有内置机制可以简单地配置所需的行为。

但是ComboBoxFilterRowHeaderComposite中有一个构造函数,它将FilterRowComboBoxDataProvider作为参数。因此,您可以提供自己的FilterRowComboBoxDataProvider实现(可能是GlazedListsFilterRowComboBoxDataProvider的子类(,并根据列索引在getValue()中实现所需的行为。