Можете ли вы связать данные с элементом управления TreeView?

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

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


person Robin Rodricks    schedule 13.06.2009    source источник
comment
Следующая статья должна позволить вам делать то, что вы хотите. http://www.codeproject.com/KB/tree/bindablehierarchicaltree.aspx Редактировать: Если вам не нужно что-то столь же сложное, как приведенное выше, следующее может быть проще/более подходящим: http://www.codeproject.com/KB/tree/dbTree.aspx Редактировать 2: Если вы хотите, чтобы это реагировать на изменения в древовидной структуре, вам, вероятно, понадобится первый вариант.   -  person Jonathan Fingland    schedule 13.06.2009


Ответы (1)


Я обошел это, создав класс, который наследует 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
        }
person Kezzla    schedule 29.04.2019