Фильтрация TreeArea

Добрый день!

Помогите решить следующую задачку:

Есть TreeArea. Требуется при фильтрации по ID родительской записи, отображать в реестре не только саму родительскую запись, но и ее подчиненные записи.

Возможно ли вообще такое реализовать?

Нравится

10 комментариев

У нас было дерево максимум 3 уровней, решали созданием колонки ParentParentID ("Родитель родителя"), заполняемой на датасете при сохранении. И фильтровали ТreeArea по совпадению идентификатора родительской записи с полями ID, ParentID, ParentParentID.

Если данных в таблице сравнительно немного, можно не заполнять поле "Родитель родителя" при сохранении, а вытягивать в SQL-запросе, но это более ресурсоёмко и на больших объёмах тормозит.

Представляю себе решение немного по-другому. Смотрю в сторону проектов - там, при фильтрации проекта по ID, в гриде отображается не только сам проект, но и его подчиненные сущности. Хочется сделать аналогично. Но, кот как это устроено в Проектах, так и не смог разобраться.

Подчиненные выбираются юнионом. Когда включена галочка "Отображать вложенные" включается юнион, который выбирает данные в соответсвии со своими фильтрами.

Да, в "проектах" тоже используется фильтрация элементов по принадлежности к дереву. Там в конечном итоге используется фильтр like по полю Path, в котором в одной строке идут подряд все GUID-ы вышестоящих узлов дерева.

Для моего случая глубина дерева была ограничена, а два поля в этом случае работают быстрее поиска в стоке по одному.

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

Path не пойдет. Объясню суть проблемы: У меня задачи переделаны в древовидный грид. И, когда осуществляется переход к задаче через уведомление, видна только задача верхнего уровня. А хотелось бы увидеть еще и подчиненные. Нет у меня такой сущности, как Path :(

Если нет, надо добавить поле. И не забыть скопировать из "проектов" логику его заполнения.

Интересно, а насколько жизнеспособен вариант с внесением изменений в функцию FilterByID?

Добрый день!
Пример работы с function FilterByID () показан в статье http://www.community.terrasoft.ru/forum/topic/1179. Возможно это именно то, что Вам нужно ;)

Да, Павел, спасибо - именно по этому пути и пошел. Все получилось :) В SQL запрос добавил фильтр с двумя параметрами - ID и ParentID, затем в FilterByID создал пару пользовательских фильтров и подсунул им передаваемый ID записи.

Показать все комментарии