private void yuangongjiansuo_Load(object sender, EventArgs e)
{
          CreateTable();
          CreateTree();
}
private DataTable dtTree = null;
        private DataView dv = null; 
        private void CreateTable()
        {
            OracleConnection conn = new OracleConnection("Data Source=orcl;User ID=TODAI;Password=TODAI");
            conn.Open();
            string sss = "Select DEPTID,DEPTNAME,PARENT_DEPT_ID from HR_DEPARTMENT";
            OracleDataAdapter kkk = new OracleDataAdapter(sss, conn);
            DataSet ds = new DataSet();
            kkk.Fill(ds);
            dtTree = ds.Tables[0];
        }        private void CreateTree()
        {
            dv = dtTree.DefaultView;
            dv.Sort = "PARENT_DEPT_ID ASC";
            DataRowView[] arrDRV = dv.FindRows(0); 
            if (arrDRV.Length == 0) return;
            TreeNode tnNew = null;
            foreach (DataRowView drv in arrDRV)
            {
                tnNew = treeView1.Nodes.Add(drv.Row["DEPTNAME"].ToString());
                tnNew.Tag = drv.Row["DEPTID"].ToString();
                CreateTreeNode(tnNew);
            }
            this.treeView1.ExpandAll();
        }
        private void CreateTreeNode(TreeNode tnParent)
        {
            DataRowView[] arrDRV = dv.FindRows(tnParent.Tag);
            if (arrDRV.Length == 0) return;
            TreeNode tnNew = null;
            foreach (DataRowView drv in arrDRV)
            {
                tnNew = tnParent.Nodes.Add(drv.Row["DEPTNAME"].ToString());
                tnNew.Tag = drv.Row["DEPTID"].ToString();
                CreateTreeNode(tnNew);
            }
        }   
找个资料中毒,东西全没了,大家帮帮忙~

解决方案 »

  1.   

    里面哪出错了?TREEVIEW获取不到部门啊,部门号:DEPTID  部门名字:DEPTNAME   父级:PARENT_DEPT_ID    表名:HR_DEPARTMENT     我哪出错了?
      

  2.   

    -----没有看你的代码
    -----------给你个 参考 参考吧
     protected void treeBind()
        {        string strsql = "select * from tree";
            DataSet myds = balcls.balds(strsql);
            mydt = myds.Tables[0];
            DataTable tempdt = mydt.Copy();
            DataView dv = new DataView(tempdt);
            dv.RowFilter = "depnum = 0";
            if (dv.Count > 0)
            {
                foreach (DataRowView myrow in dv)
                {
                    string depname = myrow["depname"].ToString().Trim();
                    TreeView1.Nodes.Add(new TreeNode(depname));
                    PopulateTreeView(depname, TreeView1.Nodes[0], myrow);
                    TreeView1.Nodes[0].Selected = true;
                    //trvDept.SelectedNode = trvDept.Nodes[0]; //选中第一个节点 
                }
            }
        }
        private void PopulateTreeView(string parentPart, TreeNode parentNode, DataRowView parentRow)
        {
            string strdeptName = "";
            DataTable temptbl = mydt.Copy();
            DataView viewinfo = new DataView(temptbl);
            //筛选获得当前传递过来的节点的子项,并将其添加到树形图中
            //判断方法是凡parentIndex等于传递过来的节点的absIndex的,就是该节点的子项
            viewinfo.RowFilter = "Parentid = '" + parentRow["depnum"].ToString().Trim() + "'";
            //递归的添加每一个节点的所有子节点
            foreach (DataRowView myRow in viewinfo)
            {
                strdeptName = myRow["depname"].ToString().Trim();
                TreeNode myNode = new TreeNode(strdeptName);
                //parentNode.Nodes.Add(myNode);
                parentNode.ChildNodes.Add(myNode);
                //函数递归调用,将所有节点按顺序添加完毕
                PopulateTreeView(strdeptName, myNode, myRow);
            }
        }
      

  3.   

    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 = "ParentId='"+nFatherid+"'";
            foreach (DataRowView Row in dv)
            {
                TreeNode node = new TreeNode();
                if (fatherNode.Value == "0")
                {
                   node.Value = Row["BH"].ToString();
                   node.Text = Row["mc"].ToString();
                   node.NavigateUrl = "";
                   node.ImageUrl = "../images/folder.gif";
                   fatherNode.ChildNodes.Add(node);
                   initTree(dt, Row["BH"].ToString(), node);
                }
                else
                {
                    node.Text = Row["mc"].ToString();
                    node.Value = Row["BH"].ToString();
                    node.ImageUrl = "../images/jg.gif";
                    fatherNode.ChildNodes.Add(node);
               }
            }
        }
    调试看看
      

  4.   

    我最近刚做的,给你看看
     public void AddTree(int id, TreeNode pNode)
            {
                DataView dvTree = new DataView(dt);
                //过滤ParentID,得到当前的所有子节点   
                string rowFilter = "["+columnParentId + "] = " + id.ToString();
                dvTree.RowFilter = rowFilter;
                foreach (DataRowView Row in dvTree)
                {
                    TreeNode Node = new TreeNode();
                    if (pNode == null)
                    {         //添加根节点   
                        Node.Text = Row[nodeText].ToString();
                        Node.Name = Row[nodeName].ToString();
                        tv.Nodes.Add(Node);
                        AddTree(Int32.Parse(Row[columnId].ToString()), Node);         //再次递归   
                    }
                    else
                    {       //添加当前节点的子节点   
                        Node.Text = Row[nodeText].ToString();
                        Node.Name = Row[nodeName].ToString();
                        pNode.Nodes.Add(Node);
                        AddTree(Int32.Parse(Row[columnId].ToString()), Node);           //再次递归   
                    }
                }
            }    
      

  5.   

            private DataTable myTable;
            private void InitDatatable()
            {
                myTable = new DataTable();
                myTable.Columns.Add("DEPTID");
                myTable.Columns.Add("DEPTNAME");
                myTable.Columns.Add("PARENT_DEPT_ID");
                myTable.Rows.Add("1", "总公司", "0");
                myTable.Rows.Add("2", "子公司1", "1");
                myTable.Rows.Add("3", "子公司2", "1");
                myTable.Rows.Add("4", "子财务部", "2");
                myTable.Rows.Add("5", "技术部", "2");
                myTable.Rows.Add("6", "销售部", "3");
            }        private void button1_Click(object sender, EventArgs e)
            {
                InitDatatable();            this.treeView1.Nodes.Clear();    //treeView1为你的TreeView控件
                TreeNode trvboot = new TreeNode("总公司");
                this.treeView1.Nodes.Add(trvboot);            BuildTree("PARENT_DEPT_ID=1", this.myTable.Select("DEPTID=1")[0], trvboot);
                this.treeView1.Nodes[0].ExpandAll();
            }        private void BuildTree(string expression, DataRow drRow, TreeNode lstNode)
            {
                int superCount = this.myTable.Select(expression).Length;
                if (superCount > 0)
                {
                    foreach (DataRow dr in this.myTable.Select(expression))
                    {
                        string childExpress = string.Format("PARENT_DEPT_ID={0}", dr["DEPTID"].ToString());
                        if (this.myTable.Select(childExpress).Length > 0)
                        {
                            TreeNode sublst = new TreeNode(dr["DEPTNAME"].ToString());
                            lstNode.Nodes.Add(sublst);
                            BuildTree(childExpress, dr, sublst);
                        }
                        else
                        {
                            BuildTree(childExpress, dr, lstNode);
                        }
                    }
                }
                else
                {
                    TreeNode node = new TreeNode(drRow["DEPTNAME"].ToString());
                    lstNode.Nodes.Add(node);
                }
            }
    把myTable中的数据换成你的DataTable数据就行, 在VS2005中调试通过。
      

  6.   

    这个是我常用的,简单明了,lz看看吧
      TreeNode tr = new TreeNode();
            tr.Text = "政府栏目管理";
            tr.Value = "0";
            TreeView1.Nodes.Add(tr);
            fillnode(tr, 0);
     
        /// 填充字节点  
      public void fillnode(TreeNode tree, int i)
        {
           try 
    {
            DataTable dt = new DataTable();
            shu.Sqlstring = "select * from info_lanmu where l_fid=" + i;
            dt = shu.GetDataSet().Tables[0];
            foreach (DataRow dr in dt.Rows)
            {
                TreeNode tc = new TreeNode();
                tc.Text = dr["l_name"].ToString();
                tc.Value = dr["l_id"].ToString();
                tc.NavigateUrl = "mess.aspx?lanmuid=" + dr["l_id"].ToString();
                tc.Target = "mainFrame";
                tree.ChildNodes.Add(tc);
                fillnode(tc, Convert.ToInt16(dr["l_id"].ToString()));
             
            }
      

  7.   

    谢谢大家,我解决了,我数据库的总节点的父级是个STRING,所以不能读出来,现在没问题了。