数据库数据如下
parID              ID                   name                   
0             1000                   中国                         
1000             10001000          北京                              
1000             10002000          上海
1000             10003000          四川
10001000             100010001001          海淀
10001000             100010001002          通州
10002000             100020001001          宝山
10003000             100030001001          成都
10003000             100030001002          达州
100030001002    1000300010011001 双流
100030001002    1000300010011002 温江现在根据条件查询出4条数据,分别是“通州”“四川”“成都”“温江”
,要把这四条数据展现在treeview上,现在给出他们的root是“中国”,
最后形式为:
“中国”
  |——————通州
  |——四川
        |———成都
       |———温江注意:取出的“通州”父节点应该是“北京”,因为“北京”不在取出的数据中,往上类推,“北京”的父节点是“中国”,所以最后“通州”的父节点是“中国”,跟“四川”一样都是“中国”的子节点。

解决方案 »

  1.   

    if(a==1)return 0;
    else func(--a);
      

  2.   

    不知道这个对你是否有参考:http://dotnet.aspx.cc/file/Recursion-Genernate-XML.aspx 
      

  3.   

    public class MenuInfo
    {
        public MenuName{get;set} //结点名称
         putlic parentID{get;set;} //结点parentid
    }
    /// <summary>
            /// 首先添加一个根结点
            /// </summary>
            public void AddRootNode()
            {
                TreeViewItem item = new TreeViewItem();
                item.Header = "中国";
                item.IsSelected = true;
                item.IsExpanded = true;            TV_TreeView.Items.Add(item);
                //添加子节点
                  AddTreeViewNode( 1000, TV_TreeView.SelectedItem as TreeViewItem);
            }
    /// <summary>
            /// 添加treeview结点
            /// </summary>
            /// <param name="parentID"></param>
            /// <param name="item"></param>
            private void AddTreeViewNode(int parentID, TreeViewItem item)
            {
                try
                {
    //MenuInfo是实体类、存储所有结点数据--menulist是MenuInfo对象的集合
                    List<MenuInfo> list = (from lst in menuList
                                           where lst.ParentID == parentID
                                           select lst).ToList();
                    if (list.Count > 0)
                    {
                        foreach (MenuInfo menuInfo in list)
                        {
                            TreeViewItem treeViewItem = new TreeViewItem();                        treeViewItem.Header = menuInfo.MenuName;
                            treeViewItem.DataContext = menuInfo;
                            item.Items.Add(treeViewItem);  
                            AddTreeViewNode(menuInfo.AutoID, treeViewItem);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "系统错误", MessageBoxButton.OK);
                }
            }
      

  4.   


    实体类少了一个属性:AutoID也就是楼主的ID字段
    public class MenuInfo
    {
        public MenuName{get;set} //结点名称
         putlic parentID{get;set;} //结点parentid
        putlic AutoID{get;set;} //结点id
    }
      

  5.   

      private void bindTreeView1()
            {
                string sql = "select * from doctype where isdel=0";
                DataTable dt = db.ExecuteDataTable(sql, CommandType.Text, null);
                DataRow[] dr=dt.Select("updirid='-1'");
                for (int i = 0; i < dr.Length; i++)
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = dr[i]["docdirname"].ToString();
                    tn.Tag=dr[i]["docdirid"].ToString();
                    if (dr[i]["isdir"].ToString() == "1")
                    {
                        tn.ImageIndex = 0;
                        FillTree(tn, dt);                   
                    }
                    else
                    {
                        tn.ImageIndex = 1;
                    }
                    treeView1.Nodes.Add(tn);
                }
            }        private void FillTree(TreeNode node, DataTable dt)
            {
                DataRow[] dd = dt.Select("updirid='"+node.Tag.ToString()+"'");
                if (dd.Length > 0)
                {
                    for (int i = 0; i < dd.Length; i++)
                    {
                        TreeNode tnn = new TreeNode();
                        tnn.Text = dd[i]["docdirname"].ToString();
                        tnn.Tag = dd[i]["docdirid"].ToString();
                        if (dd[i]["isdir"].ToString() == "1")
                        {
                            tnn.ImageIndex = 0;
                            FillTree(tnn, dt);
                        }
                        else
                        {
                            tnn.ImageIndex = 1;
                        }
                        node.Nodes.Add(tnn);
                    }
                }
            }
      

  6.   

    昨天刚完成单表无索引无极树大功告成采用递归
    http://blog.csdn.net/xianfajushi/article/details/7550084
      

  7.   


     /// <summary>
           /// 绑定TreeView控键
           /// </summary>
           /// <param name="project"></param>
           /// <param name="parentId"></param>
            void BuildTreeView(BillsOfQuantities.ProjectDataTable project, int parentId)
            {
                foreach (BillsOfQuantities.ProjectRow area in project.Select(string.Format("parentId = {0}", parentId)))
                {
                    TreeNode node = new TreeNode();   //根节点
                    node.Text = area.Name;
                    node.Tag = area;
                    this.treeName.Nodes.Add(node);
                    selectChild(node, project, area.ProjectId);            }
                TreeNode tn = treeName.Nodes[0];
                this.treeName.SelectedNode = tn;
            }
            /// <summary>
            /// 递归查询子节点
            /// </summary>
            public void selectChild(TreeNode tnn, BillsOfQuantities.ProjectDataTable project, int parentId)
            {
                foreach (BillsOfQuantities.ProjectRow it in project.Select(string.Format("parentId = {0}", parentId)))
                {
                    TreeNode tn = new TreeNode();
                    tn.Text = it.Name;
                    tn.Tag = it;
                    tnn.Nodes.Add(tn);
                    selectChild(tn, project, it.ProjectId);
                }        }
    以前写的 我把数据弄的数据集里面来操作的BuildTreeView(BillsOfQuantities.ProjectDataTable project, int parentId);调用这个方法parentId参数传0就行了