我有一个具有以下图层的NatTable组件:


视口图层
选择层
RowHideShowLayer
ColumnGroupExpandCollapseLayer
ColumnHideShowLayer
数据层


当复选框选择更改时,我需要显示/隐藏特定的列。为此,我使用NatTable组件提供的#doCommand()方法:

if(selection) {
   nattable.doCommand(new ColumnShowCommand(nattable, COLUMN_INDEX));
} else {
   nattable.doCommand(new ColumnHideCommand(nattable, COLUMN_INDEX+1));
}


一切正常,除了选择表中的所有项目并执行ColumnHideCommand的情况。在这种特定情况下,整个表的内容都会消失(Screenshot)。如果表中没有选择项,或者不是所有元素都被选中,则一切正常。

如果您有任何想法,或者以前曾经遇到过此类问题,请告诉我。我在NatTables方面的经验非常有限,因此,如果您需要任何其他信息,请告诉我。谢谢!

最佳答案

SelectionLayer的一项功能是支持基于列选择的多列隐藏操作。 ColumnHideCommand被消耗,而根据完全选择的列创建并执行MultiColumnHideCommand。负责的代码位于SelectionLayer#handleColumnHideCommand(ColumnHideCommand)中。该方法受保护,因此如果不需要该功能,因为它仅以编程方式而不是通过用户执行的UI支持列隐藏/显示,则可以覆盖该方法以仅执行super.doCommand(command);而不检查选择。

10-08 09:22