我试图实现用NatTable实现的树的排序,但我真的不明白它是如何工作的。我的问题是,在对"树"列以外的任何列进行排序后,子节点都可能移动到无效的父节点。尽管元素的顺序在层次结构的所有级别上都是正确的。所以基本上我不理解TreeList.Format.getComparator()
的用途,也不理解它与为列注册的比较器之间的关系,也不明白节点何时以及为什么可以更改其父节点。
我从这个例子开始TreeGridExample和我成功地创建了测试数据,我也遇到了同样的问题
private void createDatums() {
createDatum(null, "a", 2);
createDatum("a", "aa1", 0);
createDatum(null, "b", 0);
createDatum("b", "bb1", 0);
createDatum(null, "m", 1);
createDatum(null, "n", 0);
}
如果我对列bar
进行排序,则bb1
节点从b
跳到n
,并且在删除排序时,它再次是b
的子级
您的比较器需要考虑树层次结构。
请参阅此处和此处了解更多信息。
关于我们的示例,可能我们的SortableTreeComparator
工作不正常。答案并非微不足道。
首先,为了使TreeList正常工作,您需要将列表中的元素按正确的顺序排列。这是树比较器。
您还需要在最低级别添加自定义排序。因此,在这种情况下,您需要扩展比较器来检查树级别。
父级更改的原因是因为比较器更改了集合中的顺序,从而破坏了整个树结构。
我们设法使它与GroupByComparator
中的GroupBy功能一起工作,但列表中有GroupByObjects。我记得这是一项艰苦的工作,使所有的工作在一起。
请创建一个票证来修复SortableTreeComparator
,不确定我何时能够处理它。