Как вы привязываетесь к элементу управления System.Windows.Forms.Treeview?

Я смотрю на этот элемент управления, и ему, похоже, не хватает стандартных свойств. datasource и datamember для привязки данных. Является ли этот контроль не связанным? Я могу написать какую-то пользовательскую функцию, которая, по-видимому, заполняет древовидную структуру из данного источника данных и встраивает объекты данных по мере необходимости, но является ли это "лучшей практикой"? Или все просто используют сторонний элемент управления TreeView?

Ответы

Ответ 1

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

К сожалению, это создает собственные методы заполнения или покупки сторонних элементов управления (которые, в конце концов, будут иметь собственные методы заполнения.)

Вот достойная статья MSDN на Связывание иерархических данных.

Ответ 2

Я использую дерево управления от Developer Express. Он возьмет таблицу данных и отобразит/отредактирует ее иерархически.
Все, что ему нужно, это поле первичного ключа и поле родительского идентификатора в таблице, и оно может выяснить, что и куда идет.

Вы можете сделать то же самое, если вы катите свой собственный код и используете свой собственный класс.

class Node
{
    System.Collections.Generic.List<Node> _Children;
    String Description;

    void Node()
    {
      _Children = new System.Collections.Generic.List<Node>();
    }

    public System.Collections.Generic.List<Node> Children()
    {
      return (_Children);
    }
}

class Program
{
    static void Main(string[] args)
    {
      System.Collections.Generic.List<Node> myTree = new System.Collections.Generic.List<Node>();
      Node firstNode = new Node();
      Node childNode = new Node();
      firstNode.Children().Add(childNode);
    }
}

Ответ 3

Если это только пара уровней, мне нравится заполнять набор данных парами таблиц и настраивать DataRelation на столбцах. Затем вы используете несколько вложенных циклов и создаете свои узлы дерева.