«Связывание» с TreeView? - PullRequest
       7

«Связывание» с TreeView?

3 голосов
/ 15 сентября 2009

Я пытаюсь собрать систему настроек сервера / сети для своего IRC-клиента. Из-за реляционной природы сетей и серверов я решил использовать SQLite для хранения всего.

Мой первый шаг - создание диалогового окна настроек, которое вы можете ожидать; TreeView, который содержит сети и сервер, а также пространство сбоку для редактирования их настроек.

У меня (крошечный) небольшой опыт работы с ADO.NET, но только базовый выбор и обновление и ничего реляционного. Так что моя проблема - выяснить, как связать строку с TreeNode. У меня уже есть пользовательские объекты TreeNode для серверов и сетей, и все это хорошо работает с некоторыми данными, введенными вручную.

Так что я думаю, что мне не нужно «связывать» per se, мне просто нужно загрузить данные в TreeView и иметь возможность легко обновлять настройки.

Ответы [ 2 ]

3 голосов
/ 15 сентября 2009

Основная проблема при заполнении Treeview заключается в том, выполняете ли вы полную загрузку всех узлов или реализуете какой-то подход с отложенной загрузкой при расширении каждого узла.

Заполнение полного дерева будет работать приемлемо только в том случае, если у вас менее 500 узлов, и количество узлов не будет расти. В противном случае подход с отложенной загрузкой лучше.

Самый простой способ сделать это - заполнить дочерние узлы в событии BeforeExpand. Однако TreeView не будет отображать знак +/-, указывающий на то, что у узла есть дочерние элементы, пока вы фактически не добавите к нему дочерние элементы. Поэтому, заполняя родительский узел, вы должны проверить, есть ли у логического элемента (строки данных) дочерние элементы, и если он есть, добавить фиктивный узел.

Я обнаружил, что наследование пользовательского класса от TreeNode - это один из самых простых подходов к определению фиктивного узла. Затем вы можете проверить это в BeforeExpand (), используя оператор Is.

Затем, когда пользователь расширяет родительский узел, в событии BeforeExpand проверьте, существует ли фиктивный узел, если он есть, и заполняйте фактические узлы. Для каждого из этих узлов проверьте наличие дочерних элементов и заполните свойство tag и фиктивный узел, если требуется.

Установите для свойства Tag для каждого узла какой-либо значимый объект / данные. Это позволит вам при необходимости легко заполнять дочерние узлы. Просто имейте в виду, что это объект типа, вам нужно будет при необходимости правильно привести его к фактическому типу данных.

3 голосов
/ 15 сентября 2009

В наших проектах мы обычно используем свойство Tag TreeNode, чтобы связать строку с TreeNode, и загружаем данные вручную в TreeView без привязки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...