DataTable dt=new DataTable();//假如这是一个产品类别,有多层的
dt.columns.add("id",System.type.getType("system.string"));//类的ID
dt.columns.add("pid",System.type.getType("system.string"));//父ID
dt.columns.add("name",System.type.getType("system.string"));//类名称
DataRow dr=dt.NewRow();
dr[0]="1";
dr[1]="";//顶级类就是空字符
dr[2]="冬装";
dt.Rows.add(dr);
dr[0]="2";
dr[1]="";
dr[2]="春装";
dt.Rows.add(dr);
dr[0]="10";
dr[1]="1";
dr[2]="羊毛衫";
dt.Rows.add(dr);
dr[0]="11";
dr[1]="1";
dr[2]="羽绒服";
dt.Rows.add(dr);
dr[0]="12";
dr[1]="2";
dr[2]="T恤";
dt.Rows.add(dr);我现在想把这个产品类的结构用TreeView控件来表现。要用到递归,这个递归怎么写。注:上面的表是我自定义,不是从数据库中读的。

解决方案 »

  1.   

    TreeView的显示结果是:
    冬装
       羊毛衫
       羽绒服
    春装
       T恤
       
      

  2.   

    2 FOR 循环????
    怎么循环?我不太明白你的意思?能写出来吗?
    这种题一般是用递归写法,其实递补算法我是会的,,只是获取里面的列值老是出错。
    如果从数据库一个表递归读出我是会的。。呵
      

  3.   

    DataTable dt = new DataTable();//假如这是一个产品类别,有多层的 
                dt.Columns.Add("id", typeof(string));//类的ID 
                dt.Columns.Add("pid", typeof(string));//父ID 
                dt.Columns.Add("name", typeof(string));//类名称 
                DataRow dr = dt.NewRow();
                dr[0] = "1";
                dr[1] = "";//顶级类就是空字符 
                dr[2] = "冬装";
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr[0] = "2";
                dr[1] = "";
                dr[2] = "春装";
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr[0] = "10";
                dr[1] = "1";
                dr[2] = "羊毛衫";
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr[0] = "11";
                dr[1] = "1";
                dr[2] = "羽绒服";
                dt.Rows.Add(dr);
                dr = dt.NewRow();
                dr[0] = "12";
                dr[1] = "2";
                dr[2] = "T恤";
                dt.Rows.Add(dr);           
                this.treeView1.Nodes.Clear();
                foreach (DataRow dra in dt.Rows)
                {
                    if (dra[1].ToString() == "")
                        
                        this.treeView1.Nodes.Add(dra[0].ToString(), dra[2].ToString());
                }
                foreach (DataRow dra in dt.Rows)
                {
                    if (dra[1].ToString() != "")
                    {
                        this.treeView1.Nodes[dra[1].ToString()].Nodes.Add(dra[2].ToString());
                    }
                }
               
            }
      

  4.   

    为什么你不再DataSet里面做这件事情呢? 哪怕只有一个表,因为DataSet才是个完整的内存数据库,并且提供了很多方便的方法,比如Select()方法~~
      

  5.   

    h_W_king的代码对我举的例子是可以的,但是我要通用的,假如我有横向5个类,纵向5个类,你要写多少个循环?
      

  6.   

    谢谢各位了,,我已经成功了,,,d[0].tostring();我把这个后面的()丢了,,唉。。