我有一个具有以下图层的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);
而不检查选择。