Файл: ...\Samples\Solution\OLE\Bldtree.scx

Элемент TreeView отображает коллекцию объектов Node (узел), каждый из которых состояит из метки и необязательной картинки (bitmap). После создания объекта TreeView мы можете добавлять, удалять, перемещать и совершать прочие операции на объектами Node путем установки свойств и вызова методов.

Этот пример показывает добавление узлов в элемент TreeView, удаление узлов, выбор узлов программным способом, запись иерархии TreeView в таблицу и чтение иерархии TreeView из таблицы.

Добавление узлов

Каждому узлу в TreeView необходимо присвоить уникальный ключ, который представляет собой символьную строку, генерируемую методом NewKey в этой примерной форме.

  Скопировать код
*метод NewKey
cKey = THIS.cNextKey
THIS.cNextKey = ALLTRIM(STR(VAL(THIS.cNextKey) + 1) + "_")
RETURN cKey

Для добавления новый узлов TreeView используется метод Add. Программный код, ассоциированный с событием Click командной кнопки cmdNewNode добавляет узел корневого уровня, используя метод Add.

  Скопировать код
o = THISFORM.oleTree
o.Nodes.Add(,1,THISFORM.NewKey(),"Click to edit text",0)

Программный код, ассоциированный с событием Click командной кнопки cmdNewChild добавляет узел, являющийся дочерним, по отношении к выбранному узлу.

  Скопировать код
o = THISFORM.oleTree
IF !ISNULL(o.SelectedItem) THEN
   o.Nodes.Add(o.SelectedItem.Key, 4, THISFORM.NewKey(), "Click to edit text",0)
ENDIF

Удаление узлов (Nodes)

Вы можете удалить все узлы, вызвав метод Clear.

  Скопировать код
THISFORM.oleTree.Nodes.Clear

Или вы можете удалить конкретные выбранные узлы, вызвав метод Remove. Помните, что при удалении узла, имеющего дочерние узлы, последние будут также удплены.

  Скопировать код
THISFORM.oleTree.Nodes.Remove(THISFORM.oleTree.SelectedItem.Key)

Запись и чтение иерархии в таблицы

Для сохранения иерархии вашего TreeView в таблицу, с тем, чтобы вы могли перезагрузить ее в дерево и редактировать, пройдите последовательно все узлы в объекте TreeView и запишите ключ, родительский ключ и текст метки в соответствующие поля таблицы.

  Скопировать код
FOR i = 1 TO loNodes.Count
   IF ISNULL(loNodes.Item(i).Parent)
      lcParent = "0_" && Root
   ELSE
      lcParent = loNodes.Item(i).Parent.Key
   ENDIF
   INSERT INTO (lcDBFName) VALUES ;
      (loNodes.Item(i).Key, ;
       lcParent, ;
       loNodes.Item(i).Text)
ENDFOR

Для восстановления иерархии дерева TreeView, просканируйте записи в таблице, используя родительский ключ, клю и текст метки, которые вы сохранили в ней ранее.

  Скопировать код
* Заполнить объект TreeView значениями из таблицы.
o = THISFORM.oleTree.Nodes
   SCAN
      IF ALLTRIM(parent) = '0_'
         o.add(,1,ALLTRIM(key),ALLTRIM(text),0)
      ELSE
         o.add(ALLTRIM(parent),4,ALLTRIM(key), ALLTRIM(text),0)
      ENDIF
      THISFORM.cNextKey = ALLTRIM(STR(VAL(key) + 1) + "_")
   ENDSCAN

Смотри также