你能绑定TreeView控件的数据吗?

时间:2009-06-13 06:19:24

标签: c# treeview data-binding

通常,当我使用C#/ VB附带的标准TreeView控件时,我会编写自己的方法来将数据传入和传出Tree的内部层次结构存储。

可能有办法将GUI“绑定”到我可以指向的数据存储(例如XML文件),当用户编辑树项时,它应该将其保存回商店。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:6)

以下文章应该让你做你想做的事 http://www.codeproject.com/KB/tree/bindablehierarchicaltree.aspx

修改:如果你不需要像上面那样精心设计的东西, 以下可能更容易/更合适: http://www.codeproject.com/KB/tree/dbTree.aspx

编辑2: 看到您希望这个响应树视图中的更改,您可能需要第一个选项。

答案 1 :(得分:0)

我通过创建一个继承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
        }