想要形成这种效果的话,首先在数据里面建一张表

create table treedata (id number, context varchar2(50), parentid number);

id:当前的id,context当前节点的值文本,parentid代表当前节点的父节点id

insert into treedata values(1, '所有部门', 0);

insert into treedata values(2, '人事部', 1);

insert into treedata values(3, '财务部', 1);

insert into treedata values(4, '生产部', 1);

insert into treedata values(5, '车间一', 4);

insert into treedata values(6, '车间二', 4);

insert into treedata values(7, '车间三', 4);

insert into treedata values(8, '商务部', 1);


再用递归根据数据库查询的值动态绑定treeView


public void AddTree(int ParentID, TreeNode pNode)
        {
            string sql = "select id, context, parentid from treedata";
            DataSet ds = OracleHelper.ExecuteDataset(OracleHelper.Con, CommandType.Text, sql, null);
            TreeNode tn1 = new TreeNode();
            DataView dvTree = new DataView(ds.Tables[0]);
            //过滤ParentID,得到当前的所有子节点
            dvTree.RowFilter = "[PARENTID] = " + ParentID;
            foreach (DataRowView Row in dvTree)
            {
                if (pNode == null)
                {    //'?添加根节点

                    tn1.Text = Row["ConText"].ToString();
                    treeView1.Nodes.Add(tn1);
                    tn1.ExpandAll();
                    AddTree(Int32.Parse(Row["ID"].ToString()), tn1);    //再次递归
                }
                else
                {   //添加当前节点的子节点
                    TreeNode tn2 = new TreeNode();
                    tn2.Text = Row["ConText"].ToString();
                    pNode.Nodes.Add(tn2);
                    tn1.ExpandAll();
                    AddTree(Int32.Parse(Row["ID"].ToString()), tn2);    //再次递归
                }
            }
            treeView1.ExpandAll();
        }

应用:

private void 人员资料管理_Load(object sender, EventArgs e)
        {
            AddTree(0, (TreeNode)null);
            treeView1.ExpandAll();//默认展开所有节点
            this.toolStripComboBox1.SelectedIndex = 0;
        }

就可以了。。。。


posted on 2012-06-01 22:20  纯洁的坏蛋  阅读(481)  评论(0编辑  收藏  举报