如何将 NatTable FilterComboBox 配置为每列具有不同的 DataProvider
How to configure NatTable FilterComboBox to have a different DataProvider for each column
在我的 NatTable 中,我使用类似于 ExcelLikeFilterRowCustomTypesExample 的 ComboBoxFilterRowHeaderComposite。它工作得相当好,但是组合框过滤在大 tables 中添加了太多项目以允许轻松过滤。然而,我试图通过只用某些项目填充组合来解决这个问题;在我的 table 中,有些列仅适用于具有有限数量的不同值的类型或操作,我想为它们添加所有选项。而对于其他列,我只想添加根项。
然而,为了实现这一点,我认为我需要修改 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
来支持多选和处理Select All类似于well-known电子表格应用程序。所以没有 build-in 机制可以简单地配置所需的行为。
但是 ComboBoxFilterRowHeaderComposite
中有一个构造函数以 FilterRowComboBoxDataProvider
作为参数。因此,您可以提供自己的 FilterRowComboBoxDataProvider
实现(可能是 GlazedListsFilterRowComboBoxDataProvider
的子类)并根据列索引在 getValue()
中实现所需的行为。
在我的 NatTable 中,我使用类似于 ExcelLikeFilterRowCustomTypesExample 的 ComboBoxFilterRowHeaderComposite。它工作得相当好,但是组合框过滤在大 tables 中添加了太多项目以允许轻松过滤。然而,我试图通过只用某些项目填充组合来解决这个问题;在我的 table 中,有些列仅适用于具有有限数量的不同值的类型或操作,我想为它们添加所有选项。而对于其他列,我只想添加根项。
然而,为了实现这一点,我认为我需要修改 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
来支持多选和处理Select All类似于well-known电子表格应用程序。所以没有 build-in 机制可以简单地配置所需的行为。
但是 ComboBoxFilterRowHeaderComposite
中有一个构造函数以 FilterRowComboBoxDataProvider
作为参数。因此,您可以提供自己的 FilterRowComboBoxDataProvider
实现(可能是 GlazedListsFilterRowComboBoxDataProvider
的子类)并根据列索引在 getValue()
中实现所需的行为。