2 001001      管理局机关  001001
3 001001012 处室         001001
4 001001026 直属         001001
5 001003      渤海钻井总公司 001003
6 001003001 机关         001003
7 001003002 机关直属 001003
8 001003003 钻井一公司 001003
9 001003004 钻井二公司 001003
10 001003005 钻前公司 001003
11 001003006 固井公司 001003
12 001003007 管具公司 001003
13 001003008 物资配送中心 001003
14 001003009 钻井设备维修中心001003
15 001003010 海胜集团 001003
16 001003011 待分配 001003
17 001003014 综合服务大队 001003
18 001003018 工程运输一公司 001003
19 001003019 工程运输二公司 001003
20 001003020 华龙实业公司 001003
21 001004         黄河钻井总公司  001004
22 001004001 机关         001004
23 001004002 机关直属 001004
24 001004003 钻井三公司 001004
25 001004004 钻井四公司 001004
26 001004005 钻井五公司 001004
27 001004006 钻前公司 001004
28 001004007 管具公司 001004如果是这样的结构,谁能给个方法形成一个树型.

解决方案 »

  1.   

    第4列是fatherid吧?
    第2列本身的id作为tag属性,逐个加载上去啊,读一条记录就去找他的父结点xxx(fatherid==xxx.tag.tostring())
      

  2.   

    其实可以这样看,id name pid 其实这就是一个表的树形结构。你先001001     管理局机关 001001  这其实就是一个根结点因为他的PID也是他自己。你看如果 PID 和 一个结点的ID相同,那么就说明,他是他的子级这样就可以形成一个树了。
      

  3.   

    递归在树上寻找父结点private TreeNode FindNode(TreeNode tnParent, string strValue)//tnParent根节点,strValue父结点id
            {
                if (tnParent == null) return null;
                if (tnParent.Tag.ToString() == strValue) return tnParent;//找到父结点            TreeNode tnRet = null;
                foreach (TreeNode tn in tnParent.Nodes)//根节点下有有子节点,继续遍历
                {
                    tnRet = FindNode(tn, strValue);
                    if (tnRet != null) break;
                }
                return tnRet;
            }
    调用findnodeTreeNode node = FindNode(treeViewFolder.Nodes[0],fatherName);//找父结点
                        if (node != null)
                        {
                            node.Nodes.Add(childNode);//把该子节点加到树上
                            node.Collapse();
                        }
      

  4.   

    你们我的这个方法行不
    public void InitTree(TreeNodeCollection Nds, string parentId) //, string flag
    {
    TreeNode tmpNd; //建立一个节点
    DataRow[] rows = ds.Tables[0].Select("c='" + parentId + "'");foreach (DataRow row in rows)
    {
    //通过查询得到父节点,依次循环
    tmpNd = new TreeNode(); //声明一个新的节点
    tmpNd.Name = row["a"].ToString();//节的名字是a.ToString()
    tmpNd.Text = row["b"].ToString();//节点的内容是b.ToString()
    tmpNd.Collapse();
    Nds.Add(tmpNd);//把节点加入到节点集合中
    InitTree(tmpNd.Nodes, tmpNd.Name);//, flag//把加入的节点作为新的节点集合再次调用 名字是a.ToString()
    }
    }
    没用是这么调用的InitTree(treeView1.Nodes, "001001");
      

  5.   

    关键在于要找到父结点在树上的位置,就是说要通过父结点的name/id这样唯一的属性得到父结点的对象parentNode。
    然后新建一个子节点对象,parentNode.add(childNode)要注意的是node.Nodes得到的节点是他的下一级的所有子节点,而他子节点的子节点不在里面的
      

  6.   

      DataTable _Talbe = new DataTable();
                _Talbe.Columns.Add("ID");
                _Talbe.Columns.Add("IdText");
                _Talbe.Columns.Add("Name");
                _Talbe.Columns.Add("Pid");
                _Talbe.Rows.Add(new object[] { "2", "001001", "管理局机关", "001001" });
                _Talbe.Rows.Add(new object[] { "3", "001001012", "处室", "001001" });
                _Talbe.Rows.Add(new object[] { "4", "001001026", "直属", "001001" });
                _Talbe.Rows.Add(new object[] { "5", "001003", "渤海钻井总公司", "001003" });
                _Talbe.Rows.Add(new object[] { "6", "001003001", "机关", "001003" });
                _Talbe.Rows.Add(new object[] { "7", "001003002", "机关直属", "001003" });
                _Talbe.Rows.Add(new object[] { "8", "001003003", "钻井一公司", "001003" });
                _Talbe.Rows.Add(new object[] { "9", "001003004", "钻井二公司", "001003" });
                _Talbe.Rows.Add(new object[] { "10", "001003005", "钻前公司", "001003" });
                _Talbe.Rows.Add(new object[] { "11", "001003006", "固井公司", "001003" });
                _Talbe.Rows.Add(new object[] { "12", "001003007", "管具公司", "001003" });
                _Talbe.Rows.Add(new object[] { "13", "001003008", "物资配送中心", "001003" });
                _Talbe.Rows.Add(new object[] { "14", "001003009", "钻井设备维修中心","001003" });
                _Talbe.Rows.Add(new object[] { "15", "001003010", "海胜集团", "001003" });
                _Talbe.Rows.Add(new object[] { "16", "001003011", "待分配", "001003" });
                _Talbe.Rows.Add(new object[] { "17", "001003014", "综合服务大队", "001003" });
                _Talbe.Rows.Add(new object[] { "18", "001003018", "工程运输一公司", "001003" });
                _Talbe.Rows.Add(new object[] { "19", "001003019", "工程运输二公司", "001003" });
                _Talbe.Rows.Add(new object[] { "20", "001003020", "华龙实业公司", "001003" });
                _Talbe.Rows.Add(new object[] { "21", "001004", "黄河钻井总公司", "001004" });
                _Talbe.Rows.Add(new object[] { "22", "001004001", "机关", "001004" });
                _Talbe.Rows.Add(new object[] { "23", "001004002", "机关直属", "001004" });
                _Talbe.Rows.Add(new object[] { "24", "001004003", "钻井三公司", "001004" });
                _Talbe.Rows.Add(new object[] { "25", "001004004", "钻井四公司", "001004" });
                _Talbe.Rows.Add(new object[] { "26", "001004005", "钻井五公司", "001004" });
                _Talbe.Rows.Add(new object[] { "27", "001004006", "钻前公司", "001004" });
                _Talbe.Rows.Add(new object[] { "28", "001004007", "管具公司", "001004" });
                treeView1.Nodes.Clear();
                for (int i = 0; i != _Talbe.Rows.Count; i++)
                {
                   string _Key =_Talbe.Rows[i][1].ToString();                string _Type = _Key.Substring(0,6);
                    TreeNode[] _TypeNodeList =treeView1.Nodes.Find(_Type,true);                if (_TypeNodeList.Length != 0)
                    {
                        _TypeNodeList[0].Nodes.Add(_Key, _Talbe.Rows[i][2].ToString());
                    }
                    else
                    {
                        treeView1.Nodes.Add(_Key, _Talbe.Rows[i][2].ToString());
                    }                
                }
      

  7.   

    3楼的这个用法怎么用啊
    FindNode(treeView1.?, "001");
    这个?的地方不知道写什么啊
      

  8.   


     id            name         parentid
    001001       管理局机关        001001 

    private void TreeDataBind()
            {
                this.TreeView1.Nodes.Add(new TreeNode("根目录", FirstCode));
                TreeDataBind(this.TreeView1.Nodes[0]);
            }        private void TreeDataBind(TreeNode node)
            {
                if (node.Depth == 0)
                    node.Expand();// = true;
                else
                    node.Collapse();// = false;
                string sql = "";
                TreeNodeCollection nodes = null;
                if (node == null)
                {
                    sql = "select * from table where  parent='" + id + "'";
                    nodes = this.TreeView1.Nodes;
                }
                DataSet ds = DataFunction.DataFunction.FillDataSet(sql);
                foreach (DataRow r in ds.Tables[0].Rows)
                {
                    TreeNode newNode = new TreeNode(r["description"].ToString(), r["code"].ToString());
                    nodes.Add(newNode);
                    TreeDataBind(newNode);
                }
            }
      

  9.   

    递归获取数据
       if (!IsPostBack)
            {
                BindJG();
            }
    private void BindJG()
        {
            DataSet ds = new DataSet();
             ..
           DataTable dtb = ds.Tables[0];
            TreeNode root = new TreeNode();
            root.Value = "0";
            root.Text = "";
            root.ImageUrl = "../images/folder.gif";
            root.Expanded = true;
            this.TreeView1.Nodes.Add(root);
            initTree(dtb, "", root);
            this.TreeView1.ExpandAll();
        }
    protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
        {
            DataView dv = new DataView(dt);        if (nFatherid == "")
                dv.RowFilter = "depth='1'";
            else
                dv.RowFilter = "shangjjgbh='"+nFatherid+"'";
            foreach (DataRowView Row in dv)
            {
                TreeNode node = new TreeNode();
                if (fatherNode.Value == "0")//根节点
                {
                   node.Value = Row["XTBH"].ToString();
                   node.Text = Row["mc"].ToString();
                   node.NavigateUrl = "";
                   node.ImageUrl = "../images/folder.gif";
                   fatherNode.ChildNodes.Add(node);
                   initTree(dt, Row["XTBH"].ToString(), node);//递归
                }
                else
                {
                    node.Text = Row["mc"].ToString();
                    node.Value = Row["XTBH"].ToString();
                    node.ImageUrl = "../images/jg.gif";
                    fatherNode.ChildNodes.Add(node);           }
            }    }