Иерархические структуры в VB

Древовидные, иерархические структуры могут быть описаны различными способами. Выбор способа описания зависит от множества факторов:

  • необходимость и интенсивность редактирования структуры
  • требование доступа к данным с помощью SQL
  • скорость доступа к определённым элементам
  • необходимость поддержки порядка следования узлов, отличного от алфавитного

Существует несколько способов отображения иерархических структур.
В первую очередь это классический TreeView. Элемент управления, используемый в VB неполноценен и для реализации некоторых функций приходиться пользоваться нестандартными приёмами.
Альтернативой ему могут служить различные Grid'ы в которых реализована возможность отображения иерархий. Это vsFlexGrid и некоторые другие. Важным преимуществом таких решений является возможность отображения данных с разбивкой на колонки.
Для навигации в иерархических структурах можно обойтись и без деревьев. Хорошим примером этому может служить стандартное диалоговое окно открыть \ сохранить обеспечивающее доступ к файловой системе.
Для отображения иерархий могут служить и элементы управления изначально для этого не предназначенные. Например, есть примеры использования списков. Еще более интересен пример, в котором TreeView реализован на основе PictureBox.
Но наиболее эффектные решения могут быть получены с использованием WebBrowser.

Тут представлены два моих VB проекта, демонстрирующих различные подходы к иерархическим структурам.

TreeViewDemo

В этой программе используется связанный список, хранимый в БД Access и элемент управления TreeView. Каждый узел содержит:

  • указатель на предка
  • указатель на потомка
  • указатель на предыдущего соседа
  • указатель на следующего соседа
  • признак раскрытия узла
  • признак выделения узла

Благодаря этой схеме любая операция с элементом требует модификации максимум трёх узлов. В программе реализованы следующие функции:

  • Вставить узел перед текущим
  • Вставить узел после текущего
  • Вставить узел потомком текущего
  • Поменять узел с вышестоящим
  • Поменять узел с нижестоящим
  • Выровнять с предком
  • Понизить уровень
  • Удалить

Скачать исходник.


OutlineDemo

Этот пример - результат перевода кода ASP проекта в VB. В примере три ключевые особенности

  • Источником данных служит БД Access, а провайдером данных является MSDataShape
  • Для отображения данных используется элемент управления WebBrowser. При этом создаётся полноценная иерархическая структура. Отображение / скрытие узла реализовано с помощью стиля элемента 'display'
  • Для объединения строк используется специальная процедура, которая значительно быстрее оператора &

Скачать исходник.

 


Страница сайта http://silicontaiga.ru
Оригинал находится по адресу http://silicontaiga.ru/home.asp?artId=4760