使用递归的方法将地区的结构显示在树视图中,数据库中的表存储方式是 
 ID   地区名   父ID
编程实现?

解决方案 »

  1.   

    TreeNode file(int id)
    {
       TreeNode tempNode=new TreeNode(id);//节点用id表示,  可以查数据库换成此id的地区名
       int[] ids=sonNode(id);//通过数据库查询所有父ID=id的值出来
       if(ids.length==0)//没有子id
      {
          return tempNode;
      }
      else
     { 
         for(int i=0;i<ids.length;i++)
         {
             tempNode.Nodes.Add(file(ids[i]));//递归
         }
         return tempNode;
     }
    }
      

  2.   

    private void btnBuild_Click(object sender, EventArgs e)
            {
                this.myRegion = ExecuteSql("SELECT *  FROM 地区表");   //myRegion为Datatable             trvXML.Nodes.Clear(); //trvXML为你的Treeview控件名
                TreeNode trvboot = new TreeNode("CHINA");
                trvXML.Nodes.Add(trvboot);            BuildTree("父ID=0", this.myRegion.Select("父ID=0")[0], trvboot);    //这里的0为最顶点ID值
                trvXML.Nodes[0].Expand();           
            }        //使用递归创建 TreeView
            private void BuildTree(string expression, DataRow drRow, TreeNode lstNode)
            {
                int superCount = this.myRegion.Select(expression).Length;
                if (superCount > 0)
                {
                    foreach (DataRow dr in this.myRegion.Select(expression))
                    {
                        string childExpress = string.Format("父ID={0}", dr["ID"].ToString());
                        if (this.myRegion.Select(childExpress).Length > 0)
                        {
                            TreeNode sublst = new TreeNode(dr["地区名"].ToString());
                            lstNode.Nodes.Add(sublst);
                            BuildTree(childExpress, dr, sublst);
                        }
                        else
                        {
                            BuildTree(childExpress, dr, lstNode);
                        }
                    }
                }
                else
                {
                    TreeNode node = new TreeNode(drRow["地区名"].ToString());
                    lstNode.Nodes.Add(node);
                }
            }更多方法,参考:http://topic.csdn.net/u/20090610/11/dc7942ba-901a-4bad-bb56-f77da9ecbd79.html
      

  3.   

    参考前几天的一个帖子:
    http://topic.csdn.net/u/20090610/11/dc7942ba-901a-4bad-bb56-f77da9ecbd79.html