有一段数据如下想建一棵树
172,173,405,415
172,173,405,416
172,172,405,417
179,208,209,2010
179,208,209,2011
....想做出这样的效果:
|-172
|   |-173
|       |-405
|           |-415
|           |-416
|           |-417
|
|
|-179
|   |-206
|       |-207
|           |-208
|           |-209
|           |-2011 

解决方案 »

  1.   


    DataTable DataC = new DataTable();
    public void CreateNodesOfParent(int iParent,TreeNode pNode) 
    {
    DataView dvwData = new DataView(DataC);
    dvwData.RowFilter =  "[UpperID] = " + iParent;
    TreeView1.AutoSelect = false;
    foreach(DataRowView Row in dvwData) 
    {

    if(pNode == null) 
    {
    TreeNode zNode= new TreeNode();
    zNode.Text=Row["Name"].ToString();
    zNode.ID =Row["ID"].ToString();
    zNode.NavigateUrl ="CategoryList.aspx?parent_id="+Row["ID"].ToString()+
    "&parent_name="+Row["Name"].ToString();
    zNode.Target ="right";
    zNode.ImageUrl="../images/folder.gif";
    zNode.Expanded=true;
    TreeView1.Nodes.Add (zNode);
    CreateNodesOfParent(Int32.Parse(Row["ID"].ToString()),zNode);

    else 
    {
    TreeNode zNode= new TreeNode();
    zNode.Text=Row["Name"].ToString ();
    zNode.ID =Row["ID"].ToString ();
    zNode.NavigateUrl ="CategoryList.aspx?parent_id="+Row["ID"].ToString()+
    "&parent_name="+Row["Name"].ToString();
    zNode.Target ="right";
    zNode.ImageUrl="../images/folder.gif";
    pNode.Nodes.Add(zNode);
    CreateNodesOfParent(Int32.Parse(Row["ID"].ToString()),zNode);
    }
    }
    }
    CreateNodesOfParent(0,(TreeNode)null);
      

  2.   

    这个建议改表结构进行存储。这样的数据如果再多几个节点,在程序中会很麻烦。。
    在SQL里面处理会好的多。。
    如果楼主确定只有这四级目录的话,用程序写还可以。。多了。就太麻烦了。。
      

  3.   


    string strs;
    string[] str=new string[4];
    TreeNode tn;
    TreeNode tn1;
    TreeNode tn2;
    TreeNode tn3;
    private void Page_Load(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    using(SqlConnection conn=new SqlConnection("server=.;database=master;uid=sa;pwd=sa"))
    {
    SqlDataAdapter da=new SqlDataAdapter("select a from p order by a",conn);
    DataSet ds=new DataSet();
    da.Fill(ds);
    for(int i=0;i<ds.Tables[0].Rows.Count;i++)
    {
    strs=ds.Tables[0].Rows[i]["a"].ToString();
    str=strs.Split(",".ToCharArray());
    if(ViewState["str0"]==null||ViewState["str0"].ToString()!=str[0])
    {
    ViewState["str0"]=str[0];
    tn=new TreeNode();
    tn.Text=str[0];
    tn.Target=str[0];
    TreeView1.Nodes.Add(tn);
    if(ViewState["str1"]==null||ViewState["str1"].ToString()!=str[1])
    {
    ViewState["str1"]=str[1];
    tn1=new TreeNode();
    tn1.Text=str[1];
    tn1.Target=str[1];
    tn.Nodes.Add(tn1);
    if(ViewState["str2"]==null||ViewState["str2"].ToString()!=str[2])
    {
    ViewState["str2"]=str[2];
    tn2=new TreeNode();
    tn2.Text=str[2];
    tn2.Target=str[2];
    tn1.Nodes.Add(tn2);
    if(ViewState["str3"]==null||ViewState["str3"].ToString()!=str[3])
    {
    ViewState["str3"]=str[3];
    tn3=new TreeNode();
    tn3.Text=str[3];
    tn3.Target=str[3];
    tn2.Nodes.Add(tn3);
    }
    }
    }
    else
    {
    if(ViewState["str2"]==null||ViewState["str2"].ToString()!=str[2])
    {
    ViewState["str2"]=str[2];
    tn2=new TreeNode();
    tn2.Text=str[2];
    tn2.Target=str[2];
    tn1.Nodes.Add(tn2);
    if(ViewState["str3"]==null||ViewState["str3"].ToString()!=str[3])
    {
    ViewState["str3"]=str[3];
    tn3=new TreeNode();
    tn3.Text=str[3];
    tn3.Target=str[3];
    tn2.Nodes.Add(tn3);
    }
    }
    else
    {
    if(ViewState["str3"]==null||ViewState["str3"].ToString()!=str[3])
    {
    ViewState["str3"]=str[3];
    tn3=new TreeNode();
    tn3.Text=str[3];
    tn3.Target=str[3];
    tn2.Nodes.Add(tn3);
    }
    }
    }
    }
    else
    {
    if(ViewState["str1"]==null||ViewState["str1"].ToString()!=str[1])
    {
    ViewState["str1"]=str[1];
    tn1=new TreeNode();
    tn1.Text=str[1];
    tn1.Target=str[1];
    tn.Nodes.Add(tn1);
    if(ViewState["str2"]==null||ViewState["str2"].ToString()!=str[2])
    {
    ViewState["str2"]=str[2];
    tn2=new TreeNode();
    tn2.Text=str[2];
    tn2.Target=str[2];
    tn1.Nodes.Add(tn2);
    if(ViewState["str3"]==null||ViewState["str3"].ToString()!=str[3])
    {
    ViewState["str3"]=str[3];
    tn3=new TreeNode();
    tn3.Text=str[3];
    tn3.Target=str[3];
    tn2.Nodes.Add(tn3);
    }
    }
    }
    else
    {
    if(ViewState["str2"]==null||ViewState["str2"].ToString()!=str[2])
    {
    ViewState["str2"]=str[2];
    tn2=new TreeNode();
    tn2.Text=str[2];
    tn2.Target=str[2];
    tn1.Nodes.Add(tn2);
    if(ViewState["str3"]==null||ViewState["str3"].ToString()!=str[3])
    {
    ViewState["str3"]=str[3];
    tn3=new TreeNode();
    tn3.Text=str[3];
    tn3.Target=str[3];
    tn2.Nodes.Add(tn3);
    }
    }
    else
    {
    if(ViewState["str3"]==null||ViewState["str3"].ToString()!=str[3])
    {
    ViewState["str3"]=str[3];
    tn3=new TreeNode();
    tn3.Text=str[3];
    tn3.Target=str[3];
    tn2.Nodes.Add(tn3);
    }
    }
    }
    }
    }
    }
    }
    }
      

  4.   

    数据库:
    user master
    go
    create table p(a varchar(100))
    insert into p select '172,173,405,415' 
    insert into p select '179,206,207,209'  
    insert into p select '179,206,207,2011' 
    insert into p select '172,173,405,416' 
    insert into p select '172,173,405,417' 
    insert into p select '179,206,207,208' 
    go
      

  5.   

    我就遇到过这样的数据库,也是这样一层一层写的。
    好在层数固定。。要不然就的在sql上下功夫了