пример как оформить таблицу в виде дерева
Tree-вью является одной из самых сложных тем в totum
. Поэтому изучаем в два этапа.
Первый — это папки и значения в одной таблице
. Для того, что бы оформить таблицу как дерево нам нужно:
Создать поле в строчной части типа Строка для названия папки/элемента.
Создать поле тип Дерево с name
— tree
.
Заполнить код-селекта:
=: selectRowListForTree(table: $#ntn; field: 'nazvanie'; parent: $#nf; order: 'nazvanie' asc)
На этом месте можно сохранить и посмотреть, что происходит. При добавлении мы заполняем название и в поле tree
можем выбрать родителя для строки.
Добавьте так несколько строк. Если tree
остается пустым — то это означает, что эта строка будет на верхнем уровне.
Дальше идем в настройки tree
и включаем параметр тип таблицы-дерева в значении по этой таблице
. А также ставим Загрузить все и Открыть все.
Теперь нам нужно оформить форматирование поля tree
. Скопируйте туда такой код и поставьте ширину полю 200
:
// Убираем пути и делаем заливку
f1=: setFormat(text: " "; background: "whitesmoke"; editbutton: true)
// Отключаем разворачивание пустым папкам и заменяем им иконку
f2=: setFormat(condition: #id != $sel; icon: "folder-o"; expand: false)
sel: selectList(table: $#ntn; field: 'tree')
// Убираем поле tree из панели
f3=: setFormat(hide: "extpanel" = true)
Какой name должно иметь поле, чтобы появилась возможность включить tree-вью?
tree
Какой параметр должен быть включен у поля tree, чтобы сработало отображение tree-вью?
Что значит «По текущей таблице»?
Это значит, что структура дерева и конечные значения находятся в одной таблице.
Можно ли настроить отображение поля tree?
Да, через код форматирования. Используйте референс приведенный выше как образец.
Что значит по «Другой таблице»?
Это значит, что дерево у нас хранится в одной таблице, а его значения в другой.
пример формирования дерева «по другой таблице»
Для примера мы используем первую таблицу как источник дерева и создадим еще одну со значениями.
Создаем еще одну таблицу.
Создаем пару полей в строчной части в которых будут значения.
Создаем поле с name
= tree
с типом Селект-дерево
. В коде селекта пишем:
=: selectRowListForTree(table: 'table_tree_1'; field: 'title'; parent: 'tree'; order: 'title' asc)
Включаем настройки дерево строится по одной таблице и папки можно выбирать тк дерево в таблице table_tree_1
строится по ОДНОЙ! таблице.
Теперь можем добавить несколько строк со значениями выбирая в каких папках они будут расположены. ничего сложного.
Включаем параметр тип таблицы-дерева в значении по другой таблице
тк дерево из table_tree_1
находится в другой таблице. А также ставим Загрузить все и Открыть все.
Сразу добавим форматирование поля tree
и поставим ему ширину 80
:
f1=: setFormat(editbutton: true; text: " "; background: "whitesmoke")
Сделаем автоматический отступ для значений в первом поле слева со значениями:
f1=: setFormat(tab: $count)
count: #l.tree * 22
Как у варианта «По другой таблице» показать не все дерево, а только его часть?
Если мы хотим показать не все дерево, а только его часть, то в код tree
надо передать list
из roots
.
Это основания (по умолчанию id
) тех родительских элементов, которые должны быть на верхнем уровне.
Как сделать так, что бы в варианте «По другой таблице» у папок тоже были строки со значениями?
Для этого добавляется еще одно поле с name
= tree_category
.
В поле кодом или вручную должно быть выбрано значение соответсвующее id
или bfield
папки, которой соответсвует строка.
Обратите внимание, что в поле tree указана родительская категория, поэтому значение в tree
и tree_category
отличаются на один уровень.
Для корректной работы поле tree_category
должно быть видимым пользователю. Может быть скрытым по умолчанию.