TreeView 建树,该怎么解决

TreeView 建树
有一段数据如下想建一棵树
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

 




------解决方案--------------------
C# code

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);

------解决方案--------------------
C# code

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);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }