public class NodeTag
        {
            public int id;
            public string name;
            public int parentId;
            public int level;            public NodeTag(int _id, string _name, int _parentId, int _level)
            {
                this.id = _id;
                this.name = _name;
                this.parentId = _parentId;
                this.level = _level;
            }
        }        private void button2_Click(object sender, EventArgs e)
        {
            /*
             目前表里有4个列
ID 名称 ParentId Level
1 省 1 0
2 市 1 1
3 区 2 2
4 区 2 2
5 市 1 1
             
             */
            NodeTag tag1 = new NodeTag(1, "LiaoNing", 0, 0);
            AddNode(tag1);            NodeTag tag2 = new NodeTag(2, "ShenYang", 1, 1);
            AddNode(tag2);            NodeTag tag3 = new NodeTag(3, "DaDong", 2, 2);
            AddNode(tag3);
            NodeTag tag4 = new NodeTag(4, "TieXi", 2, 2);
            AddNode(tag4);
            NodeTag tag5 = new NodeTag(5, "DaLian", 1, 1);
            AddNode(tag5);            NodeTag tag6 = new NodeTag(6, "XinMin", 5, 3);
            AddNode(tag6);            treeView1.ExpandAll();        }        private TreeNode FindNodeById(int id)
        {
            return FindNodeById(id, treeView1.Nodes);
        }        private TreeNode FindNodeById(int id, TreeNodeCollection nodes)
        {
            NodeTag tag;
            foreach (TreeNode node in nodes)
            {
                tag = node.Tag as NodeTag;
                if (tag.id == id)
                    return node;
                else
                    return FindNodeById(id, node.Nodes);
            }            return null;
        }        private void AddNode(NodeTag tag)
        {
            int parentId = tag.parentId;
            TreeNode newNode = new TreeNode(tag.name);
            newNode.Tag = tag;            if (parentId == 0)
            {
                treeView1.Nodes.Add(newNode);
            }
            else
            {
                TreeNode parentNode = FindNodeById(parentId);
                if (parentNode != null)
                {
                    parentNode.Nodes.Add(newNode);
                }
            }
        }这样写XinMin会显示不出来,请问如何能让XinMin显示在DaLian的下面呢?

解决方案 »

  1.   

    你这里面总共有5个,你写了6个,肯定显示不出来,你应该在写一个AddChildNode,你是不是想把xinmin放在dalian的下面,也就是xinmin是dalin的子结点?还是啊,如果不是的话,就当我没说吧!
      

  2.   

    http://topic.csdn.net/u/20110118/09/6f1371da-56cb-450a-9319-fe5c7168d9c9.html
    这个帖子我已经回答了。
      

  3.   

    我这个不是有重复的数据被加载进去,而是由数据没被加载进去。  NodeTag tag6 = new NodeTag(6, "XinMin", 5, 3);
      AddNode(tag6);只显示了前五条,如果把XinMin放在第一个市节点ShenYang下市可以的,但是放在第二个市节点下就会显示不出来。
      

  4.   

    NodeTag tag1 = new NodeTag(1, "LiaoNing", 0, 0);
                NodeTag tag2 = new NodeTag(2, "ShenYang", 1, 1);
                NodeTag tag3 = new NodeTag(3, "DaDong", 2, 2);
                NodeTag tag4 = new NodeTag(4, "TieXi", 2, 2);
                NodeTag tag5 = new NodeTag(5, "DaLian", 1, 1);
                NodeTag tag6 = new NodeTag(6, "XinMin", 5, 3);
                List<NodeTag> lst = new List<NodeTag>();
                lst.Add(tag1);
                lst.Add(tag2);
                lst.Add(tag3);
                lst.Add(tag4);
                lst.Add(tag5);
                lst.Add(tag6);
                BindingTree(null, null, lst);
                treeView1.ExpandAll();private void BindingTree(TreeNode tn, NodeTag nt, List<NodeTag> lst)
            {
                List<NodeTag> lstp;
                if (tn == null)
                {
                    lstp = lst.FindAll(
                        delegate(NodeTag ntfind)
                        {
                            return ntfind.parentId == 0;
                        });
                }
                else
                {
                    lstp = lst.FindAll(
                       delegate(NodeTag ntfind)
                       {
                           return ntfind.parentId == nt.id;
                       });
                }
                for (int i = 0; i < lstp.Count; i++)
                {
                    TreeNode tnNew = new TreeNode();
                    tnNew.Text = lstp[i].name;
                    if (tn == null)
                    {                    treeView1.Nodes.Add(tnNew);
                    }
                    else
                    {
                        tn.Nodes.Add(tnNew);
                    }
                    BindingTree(tnNew, lstp[i], lst);
                }
            }
      

  5.   

    请问如果这样写如何能实现对于数据库的读取呢?
    目前表里有4个列
    ID 名称 ParentId Level
    1 省 1 0
    2 市 1 1
    3 区 2 2
    4 区 2 2
    5 市 1 1
    6 区 5 2
    7 街 6 3
    你写的这个好像没有用到 Level这一列吧?请问如果是这样的库我应该如何写呢?高手帮忙看看。
      

  6.   

    level干什么用的???排序??直接lst.sort
      

  7.   

    Level是节点的层数
    省最高成0,以此类推市1区2街路3等等无限向下类推。
      

  8.   

    哦,那请问要如何将
    NodeTag tag1 = new NodeTag(1, "LiaoNing", 0, 0);
                NodeTag tag2 = new NodeTag(2, "ShenYang", 1, 1);
                NodeTag tag3 = new NodeTag(3, "DaDong", 2, 2);
                NodeTag tag4 = new NodeTag(4, "TieXi", 2, 2);
                NodeTag tag5 = new NodeTag(5, "DaLian", 1, 1);
                NodeTag tag6 = new NodeTag(6, "XinMin", 5, 3);
                List<NodeTag> lst = new List<NodeTag>();
                lst.Add(tag1);
                lst.Add(tag2);
                lst.Add(tag3);
                lst.Add(tag4);
                lst.Add(tag5);
                lst.Add(tag6);
                BindingTree(null, null, lst);
                treeView1.ExpandAll();
    写成从数据库中读取呢?
      

  9.   

    数据库读出dataset
    然后List<NodeTag> lst = new List<NodeTag>();
    foreach(DataRow row in ds.Tables[0].Rows)
                    {
                        NodeTag o=new NodeTag();
                        o.ID= row["ID"].ToString();
                        ...省略
                        lst.Add(o);
                    }
      

  10.   

                treeView1.Nodes.Clear();
                DataSet ds = null;
                ds = DalAddress.GetAllAddress("ModAddress");
                List<NodeTag> lst = new List<NodeTag>();
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    NodeTag o = new NodeTag(Convert.ToInt32(row["AddressID"].ToString()), row["Address"].ToString(), Convert.ToInt32(row["ParentID"].ToString()), Convert.ToInt32(row["Level"].ToString()));
                    o.id = Convert.ToInt32(row["AddressID"].ToString());
                    o.name = row["Address"].ToString();
                    o.parentId = Convert.ToInt32(row["ParentID"].ToString());
                    o.level = Convert.ToInt32(row["Level"].ToString());
                    lst.Add(o);
                }
                treeView1.ExpandAll();请看看我这里有写错的地方吗?