我的数据表是gx表,里面就两列数据,fth(父图号)和zth(子图号),例如 
fth         zth
中国       浙江
中国       湖北
浙江       杭州
浙江       宁波
杭州       余杭
杭州       萧山
······web程序中有个textbox1和treeview1,在textbox1中输入父图号值,点button,treeview中就会显示相应内容。例如在textbox1中输入“浙江”,treeview1就会显示“
     浙江
        杭州
           余杭
           萧山
        宁波请问该如何写这段代码?

解决方案 »

  1.   

    看看这个
    数据库结构:   
      id            name              parentid 
      1             一级                 0 
      2             科技                 1 
      3             沈阳                 2 
      4             二级                 0 
      5             美食                 4 
      6             哈尔滨               5 
      7             三级                 0 
      8             美食                 7 
      9             大连                 8       private   void   LoadTree() 
           {
                treeView1.Nodes.Clear();     //先清空树 
                DataTable dt = ds.Tables[0]; //把表结构从数据库查出来放到DataTable中 
                //循环绑定父节点 
                foreach (DataRow dr in dt.Rows)
                {
                    //遍历加载父节点 
                    if (Convert.ToInt32(dr["parentid"]) == 0)
                    {
                        TreeNode newNode = new TreeNode(dr["name"].ToString());
                        treeView1.Nodes.Add(newNode);                    ChildLoad(dr, newNode, dt);
                    }                 
                }            this.treeView1.ExpandAll();
            }        //绑定子节点 
            private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt)
            {
                foreach (DataRow row in dt.Rows)
                {
                    if (Convert.ToInt32(dr["id"]) == Convert.ToInt32(row["parentid"]))
                    {
                        TreeNode childNode = new TreeNode();
                        childNode.Text = row["name"].ToString();
                        newNode.Nodes.Add(childNode);                    ChildLoad(row, childNode, dt);   //递归子节点 
                    }
                }
            }
      

  2.   

    就是在数据库中查找“浙江”的父图号的数据放到DataTable中
      

  3.   

    先绑定根节点,"浙江"作为参数传入
    private void TreeViewBind()
    {
                //bind treeview
                tv.Nodes.Clear();
                treeNode level1Node = new TreeNode();
                level1Node.Text ="浙江";
                tv.Nodes.Add(level1Node);
               
                InitialTree(level1Node,"浙江");}
    //递归绑定子节点
      private void InitialTree(TreeNode parentNode, string t)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    if (list[i].fth.equals(t))
                    {
                        TreeNode childNode = new TreeNode();
                        childNode.Text = list[i].zth;
                        InitialTree(childNode, list[i].zth);
                        parentNode.ChildNodes.Add(childNode);
                    }
                }
            }
      

  4.   

    private  void  LoadTree() 
          { 
                treeView1.Nodes.Clear();    //先清空树 
                DataTable dt = ds.Tables[0]; //把表结构从数据库查出来放到DataTable中 
                //循环绑定父节点 
                foreach (DataRow dr in dt.Rows) 
                { 
                    //遍历加载父节点 
                    if (dr["fth"] == '浙江') //绑定浙江
                    { 
                        TreeNode newNode = new TreeNode(dr["fth"].ToString()); 
                        treeView1.Nodes.Add(newNode);                     ChildLoad(dr, newNode, dt); 
                    }                
                }             this.treeView1.ExpandAll(); 
            }         //绑定子节点 
            private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt) 
            { 
                foreach (DataRow row in dt.Rows) 
                { 
                    if (dr["fth"] == row["zth"]) 
                    { 
                        TreeNode childNode = new TreeNode(); 
                        childNode.Text = row["zth"].ToString(); 
                        newNode.Nodes.Add(childNode);                     ChildLoad(row, childNode, dt);  //递归子节点 
                    } 
                } 
            }
      

  5.   

    list 该怎样定义呢?怎样跟数据库连接起来呢?
      

  6.   

    6楼的高手
    是不是应该在
    TreeView1.Nodes.Clear();    //先清空树 
             string sqlname = "SELECT fth,zth from gx where fth='浙江'";
            SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString1"]);
            SqlCommand cmd = new SqlCommand(sqlname, cn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
                DataTable dt = ds.Tables[0];
      

  7.   

    6楼的应该可以,如果树的深度比较大,还可以采用鼠标点击节点逐级展开,免得ExpandAll太卡了
      

  8.   

    浙江只是打个比方,数据库里都是零件图号的父子关系,编译的时候 if (dr["fth"]=='HW69090701')
    报错说我”字符文本中的字符太多“,该怎样解决??
      

  9.   

    dr["fth"].ToString()=="HW69090701"
    不知道可不可以?
      

  10.   

    12楼的可以了。但是newNode.Nodes.Add(childNode);提示”是一个“方法”,这在给定的上下文中无效“,该怎样解决?
      

  11.   

    newNode.Nodes.Add(childNode);这句应该没问题啊,你检查下是不是有拼写错误……
      

  12.   

    CS0119: “System.Xml.Linq.Extensions.Nodes<T>(System.Collections.Generic.IEnumerable<T>)”是一个“方法”,这在给定的上下文中无效源错误: 行 96:                     TreeNode childNode = new TreeNode(); 
    行 97:                     childNode.Text = row["zth"].ToString(); 
    行 98:                     newNode.Nodes.Add(childNode);
    行 99: 
    行 100:                    ChildLoad(row, childNode, dt);  //递归子节点 
     
      

  13.   

    试试这个:
    自己定义一个根节点:tn,tn.tag="zhongguo",然后调用addtreenode(tn.nodes,tn.tag);
            public void addtreenode(TreeNodeCollection nodes, string fnodetag)
            {
                DataView dv = new DataView(mytable);
                if (fnodetag != null)
                {
                    dv.RowFilter = "FParentID=" + fnodetag;
                }
                foreach (DataRowView drv in dv)
                {
                    if (drv[1].ToString() != "")
                    {
                        TreeNode snode = new TreeNode(drv[1].ToString());
                        snode.Tag = drv[0].ToString();
                        nodes.Add(snode);
                        this.addtreenode(snode.Nodes, snode.Tag.ToString());
                    }
                }
            }
      

  14.   

    newNode.Nodes.Add(childNode);
    改成
    newNode.ChildNodes.Add(childNode);
    应该可以了
      

  15.   

    整个的代码如下:编译的时候对DataTable dt = ds.Tables[0];提示无法找到表 0。该怎样解决?
    protected void TreeView1_Load(object sender, EventArgs e)
        {
           TreeView1.Nodes.Clear();    //先清空树 
           string sqlname = "SELECT fth,zth from gx where fth='HW69090701'";
           SqlConnection cn = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnString1"]);
           SqlCommand cmd = new SqlCommand(sqlname, cn);
           SqlDataAdapter da = new SqlDataAdapter(cmd);
           DataSet ds = new DataSet();
            DataTable dt = ds.Tables[0];//把表结构从数据库查出来放到DataTable中 
               
                //循环绑定父节点 
                foreach (DataRow dr in dt.Rows) 
                { 
                    //遍历加载父节点 
                        if (dr["fth"].ToString()=="HW69090701")                { 
                        TreeNode newNode = new TreeNode(dr["fth"].ToString()); 
                        TreeView1.Nodes.Add(newNode);                     ChildLoad(dr, newNode, dt); 
                    }                
                }             this.TreeView1.ExpandAll();          }
        private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt) 
            { 
                foreach (DataRow row in dt.Rows) 
                { 
                    if (dr["fth"] == row["zth"]) 
                    { 
                        TreeNode childNode = new TreeNode(); 
                        childNode.Text = row["zth"].ToString(); 
                        //newNode.Nodes.Add(childNode);
                        newNode.ChildNodes.Add(childNode);                    ChildLoad(row, childNode, dt);  //递归子节点 
                    } 
                } 
            }
      

  16.   

    我改了改,改成DataSet ds = new DataSet();           da.Fill(ds,"gx");       DataTable dt = ds.Tables[0];  可以运行了,但是运行后却看不到treeview1,请问大家是怎么回事?