2016-05-08 7 views
1

Я пытаюсь реализовать сортировку дерева, реализованного с помощью NatTable, но я не могу понять, как это работает. Моя проблема заключается в том, что после сортировки любого столбца, отличного от дерева, дочерние узлы могут перемещаться к недопустимому родительскому элементу. Хотя порядок элементов правилен на всех уровнях иерархии. Поэтому в основном я не понимаю цели TreeList.Format.getComparator() и как она связана с компараторами, зарегистрированными для столбцов, и я не понимаю, когда и почему узел может изменить родителя.Сортировка дерева, реализованного с помощью NatTable

Я начал с примером 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

ответ

0

Ваш компаратор должен учитывать иерархию деревьев.

См. here и here Дополнительная информация.

+0

Я читал обе дискуссии, но я до сих пор не могу найти причину, по которой узлы меняют родителя. Поскольку у меня есть wroten, у меня такая же проблема, даже с примером кода NatTable. – Joel

+0

Насколько я помню, дерево создается переходом по списку в порядке DFS. Вы должны объединить его с объектом древовидного формата, который управляет иерархией. –

0

Что касается нашего примера, может быть, наш SortableTreeComparator работает неправильно. И ответ не является тривиальным.

Во-первых, чтобы заставить TreeList работать правильно, вам необходимо привести элементы в списке в правильном порядке. Это компаратор дерева.

Что вы еще хотите, так это добавить пользовательскую сортировку на самом низком уровне. Поэтому в этом случае вам необходимо расширить свой компаратор, чтобы проверить уровень дерева.

Причина изменения родителя заключается в том, что ваш компаратор изменяет порядок в коллекции и, следовательно, разбивает всю структуру дерева.

Нам удалось заставить его работать с функцией GroupBy в GroupByComparator, но там есть список GroupByObjects в списке. И я помню, что было тяжело работать, чтобы все работало вместе.

Пожалуйста, создайте билет, чтобы исправить SortableTreeComparator, не уверен, когда я смогу работать над ним.

 Смежные вопросы

  • Нет связанных вопросов^_^