使用NatTable实现的树排序



我试图实现用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,不确定我何时能够处理它。

最新更新