表结构如下:mytable _________________________________________________________________________  
    OrgID/单位ID                         OrgName/单位名称                     UpperOrgID/上级单位ID       
    A001                                         省教育厅                                  0     -----表示是顶级单位   
    A002                                         XX大学                                    A001   
    A003                                         XX大学理学院                              A002   
    A004                                         YY大学                                    A001   _________________________________________________________________________
想实现的TreeView如下:-省教育厅   
          -XX大学   
                    --XX大学理学院   
          -YY大学  
                    --XX大学理学院    ----------------------------------------
代码如下,小弟运行后,树目录不显示。请问为什么?
谢谢
---------------------------------------
private void CreateTree()
        {            string str = "Data Source=ECE-6D6D44DE2AD;Initial Catalog=Kqdb;Integrated Security=True";//数据库连接
            SqlConnection conn = new SqlConnection(str);
            conn.Open();            SqlCommand sqlcom = new SqlCommand("Select * from mytable where UpperOrgID='0'", conn);
            try
            {
                conn.Open();
                SqlDataReader sqlreader = sqlcom.ExecuteReader();
                while (sqlreader.Read())
                {
                    TreeNode mynode = new TreeNode();
                    mynode.Text = sqlreader.GetString(2);
                    mynode.Tag = sqlreader.GetValue(1).ToString() + '|' + sqlreader.GetValue(2).ToString() + '|' + sqlreader.GetValue(3).ToString() + '|' + sqlreader.GetValue(0).ToString();
                    treeView1.Nodes.Add(mynode);                    NextTree(sqlreader.GetValue(0).ToString(), treeView1.Nodes[0]);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                conn.Close();
            }
        }        private void NextTree(string nodeid, TreeNode parentnode)
        {
            string str = "Data Source=ECE-6D6D44DE2AD;Initial Catalog=Kqdb;Integrated Security=True";//数据库连接
            SqlConnection conn = new SqlConnection(str);
                 SqlCommand sqlcom = new SqlCommand("Select * from mytable where UpperOrgID='" + nodeid + "'",conn);
            try
            {
                conn.Open();
                SqlDataReader sqlreader = sqlcom.ExecuteReader();                while (sqlreader.Read())
                {
                    TreeNode mynode = new TreeNode(sqlreader.GetString(2));
                    parentnode.Nodes.Add(mynode);
                    mynode.Tag = sqlreader.GetValue(1).ToString() + '|' + sqlreader.GetValue(2).ToString() + '|' + sqlreader.GetValue(3).ToString() + '|' + sqlreader.GetValue(0).ToString();
                    NextTree(sqlreader.GetValue(0).ToString(), mynode);                }            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                conn.Close();
            }        }

解决方案 »

  1.   

    http://topic.csdn.net/u/20100628/21/8be22000-dca4-478c-b96d-f19574c0c228.html
      

  2.   

    NextTree(sqlreader.GetValue(0).ToString(), mynode);
    这一直递归,都没add到树的node上去吧?
      

  3.   

    看到这么多代码就头疼,,兄弟还是DEBUG吧 这样找错来得快顶了先
      

  4.   

    给楼主提个建议吧,
    1 不论代码的对于错,楼主的递归没执行一次就要查询一次数据库,为什么不打数据一次性查询出来(数据量不大的情况下)。这样一直请求数据连接及操作。数据服务器压力太大了。
    下面是我写的递归绑定Tree节点的函数,楼主可以参考一下,希望对你有帮助。
    private void FillTreeViewItems(TreeViewItem tvItem,DataTable dt,string parentId)
           {
              TreeViewItem tmpItem;
              string strFilter = string.Format("PARENTCODE='{0}'",parentId);
              DataRow[] drTmp = dt.Select(strFilter); 
               foreach(DataRow dr in drTmp)
               {
                   tmpItem = new TreeViewItem();
                   tmpItem.Header=dr["CODENAME"].ToString();
                   tmpItem.Tag = dr["CODE"].ToString();
                   tvItem.Items.Add(tmpItem);
                   FillTreeViewItems(tmpItem, dt, tmpItem.Tag.ToString());
               }       }