Можете ли вы связать данные элементом управления TreeView? - PullRequest
5 голосов
/ 13 июня 2009

Обычно, когда я использую стандартный элемент управления TreeView, который поставляется с C # / VB, я пишу свои собственные методы для передачи данных в хранилище внутренней иерархии дерева и из него.

Могут быть способы «привязать» GUI к хранилищу данных, на которое я могу указать (например, к файлам XML), и когда пользователь редактирует элементы дерева, он должен сохранить его обратно в хранилище. Есть ли способ сделать это?

Ответы [ 2 ]

6 голосов
/ 13 июня 2009

Следующая статья должна позволять вам делать то, что вы хотите.
http://www.codeproject.com/KB/tree/bindablehierarchicaltree.aspx

Редактировать: Если вам не нужно что-то более сложное, как указано выше, следующее может быть проще / более подходящим: http://www.codeproject.com/KB/tree/dbTree.aspx

Редактировать 2: Если вы хотите, чтобы это реагировало на изменения в древовидной структуре, вам, вероятно, понадобится первый вариант.

0 голосов
/ 29 апреля 2019

Я справился с этим, создав класс, который наследует TreeNode и содержит объект. затем вы можете привязать запись к узлу и вызвать ее во время события Click или DoubleClick. Например.

class TreeViewRecord:TreeNode
    {
        private object DataBoundObject { get; set; }

        public TreeViewRecord(string value,object dataBoundObject)
        {
            if (dataBoundObject != null) DataBoundObject = dataBoundObject;
            Text = value;
            Name = value;
            DataBoundObject = dataBoundObject;
        }

        public TreeViewRecord()
        {
        }

        public object GetDataboundObject()
        {
            return DataBoundObject;
        }
    }

тогда вы можете привязываться к каждому узлу при создании TreeView, например.

TreeView.Nodes.Add(new TreeViewRecord("Node Text", BoundObject));
//or for subNode
TreeView.Nodes[x].Nodes.Add(new TreeViewRecord("Node Text", BoundObject));

Затем вы можете связать событие DoubleClick с чем-то вроде этого

private void TreeViewDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
             object exp = ((TreeViewRecord) e.Node).GetDataboundObject();
             //Do work
        }
...