C#中如果需要建立一个动态树的话,除了在界面里创建一个TreeView控件和在系统数据库里建立一个目录树的表之外,还需要怎么做?

解决方案 »

  1.   

    更具需要new 一个节点类 赋值属性 填到treeview中
      

  2.   

    那就从数据库中读取然后填充到treeview中去啊,so easy
      

  3.   

    如果不是很复杂的话,,直接读取出ID,NAME,父ID就可以了吧,访问数据库的时候ID,NAME,父ID一起读出,赋值给LIST<节点类>
      

  4.   

    给你个二叉搜索树,。 class Node          // 节点
            {
                public int data;            // 数据,类型可用泛型
                public Balance balance;     // 平衡状态
                public Node left;           // 左节点
                public Node right;          // 右节点            public Node(int d)
                {
                    data = d;
                    balance = Balance.balanced;
                    left = right = null;
                }            public void Traversed()                         // 单个节点的访问
                {
                    Console.Write("{0} ", data);
                }            public static void PrintTree(Node t, int level) // 显示树(左转90度)
                {
                    if (t == null) return;                PrintTree(t.right, level + 1);
                    string s = new string(' ', level * 4);
                    Console.Write(s);
                    Console.WriteLine("{0}", t.data);
                    PrintTree(t.left, level + 1);
                }            public static void Inorder(Node p)          //  中序遍历
                {
                    if (p == null) return;                Inorder(p.left);
                    p.Traversed();
                    Inorder(p.right);
                }            public static void Preorder(Node p)          //  前序遍历
                {
                    if (p == null) return;                Preorder(p.left);
                    p.Traversed();
                    Preorder(p.right);
                }            public static void Postorder(Node p)          // 后序遍历
                {
                    if (p == null) return;                Postorder(p.left);
                    p.Traversed();
                    Postorder(p.right);
                }            public static void Levelorder(Node p)          // 层序遍历
                {
                    Queue<Node> nodes = new Queue<Node>();
                    nodes.Enqueue(p);                while (nodes.Count > 0)
                    {
                        Node tmp = nodes.Dequeue();
                        if (tmp != null)
                        {
                            tmp.Traversed();
                            nodes.Enqueue(tmp.left);
                            nodes.Enqueue(tmp.right);
                        }
                    }
                }
            }
     class BinSTree      // 二叉搜索树
            {
                private Node root;            public BinSTree()
                {
                    root = null;
                }            public void Add(int data)
                {
                    Node node = new Node(data);
                    Insert(ref root, node);
                }            private void Insert(ref Node tree, Node newNode)
                {
                    if (tree == null)
                        tree = newNode;
                    else if (newNode.data < tree.data)
                        Insert(ref tree.left, newNode);
                    else
                        Insert(ref tree.right, newNode);
                }            public void Print()
                {
                    Node.PrintTree(root, 1);
                }
            }
      

  5.   

    查询数据递归绑定到treeview
    private void InitTree(TreeNodeCollection Nds,string parentId)
    {
    DataView dv=new DataView();
    TreeNode tmpNd;
    string intId;
    dv.Table=ds.Tables["tree"];
    dv.RowFilter="ParentId='" + parentId + "'" ;
    foreach(DataRowView drv in dv)
    {
    tmpNd=new TreeNode();
    tmpNd.Tag=drv["NodeId"].ToString();
    tmpNd.Text=drv["NodeName"].ToString();
    Nds.Add(tmpNd);
    intId=drv["ParentId"].ToString();
    InitTree(tmpNd.Nodes,tmpNd.Tag.ToString());
    }
    }  
      

  6.   

    TreeNode 递归添加到treeview中!
      

  7.   

    那么在节点类的属性中可以定义除了节点在目录树表中的ID,NAME,父ID之外还可以定义节点本身的一些属性吗?比如节点对应的某个特定的对象。
      

  8.   

    我补充一点吧,关于treeview.treenode有几个重要的属性:
    1.treenode.name;  
    2.treenode.text; 
    这两个属性类似于 hashtable的(key,value),name可以作为唯一识别一个树控件下唯一结点的标识,比如treeview1.nodes[key1]; 而text则是该节点在树中显示的文本
    3.treenode.tag
    这个属性可以用一个object对象赋值,换句话说你可以在每个节点下挂载一个object,当然里面可以包含任何数据。其他的动态建树的思路楼上讲了我就不赘述了纯手工回复,给点分噢