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

Rob*_*cks 5 c# data-binding treeview

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

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

Jon*_*and 6

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

编辑:如果您不需要像上面那样详细的内容,以下内容可能更容易/更合适:http: //www.codeproject.com/KB/tree/dbTree.aspx

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


小智 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后您可以在构建 TreeView 时绑定到每个节点,例如。

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

然后你可以将 DoubleClick 事件绑定到这样的东西

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