哪位高手指教一下!
   treeview怎么动态生成,后台用sql server,前台是windows应用程序,c#编写!!
   treeview 的各个节点的值从数据库读!
   求数据库设计和前台代码!!
   万分感谢!!
   50分回报!!
   谢谢!!

解决方案 »

  1.   

    用treeview递归
    string[] tree=GetSubTask(nTaskID)//取出顶级任务的名称的数组,这里可能不正确,
       for(int i=0 ;i<count;i++)//count 顶级数量
          {
               TreeNode rootNode = new TreeNode(tree[i]);
               rootNode.ImageIndex = 2;
               rootNode.SelectedImageIndex = 0;
       treeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[]{rootNode});
      treeitem(rootNode,tree[i])
           }private void treeitem(TreeNode treeup,int nTaskID)
    {
       //查询下级
       string[] tree=GetSubTask(nTaskID)
       for(int i=0 ;i<count;i++)
       {
          TreeNode myComputer = new TreeNode(tree[i]);
          myComputer.ImageIndex = 2;     
          myComputer.SelectedImageIndex = 0;
          treeup.Nodes.Add(myComputer);
          treeitem(myComputer,tree[i]);
         }
    }
      

  2.   

    数据库可以设计成ID,cname,up_id
    1,中国,0
    2,吉林,1
    3,长春,2也可以设计成ID是变长的,例:
    01,中国
    0122,吉林
    012201,长春
    根据位数判断级别
      

  3.   

    如果关系不是很复杂,建议使用 zwfhome1(任由风吹)说的第二种方法,这种方法生成树快,填充treeview比第一种快很多。
      

  4.   

    private void SetSourceClassTolvSource(TreeNode tn)
            {
                DataRow[] dr = this.dsSource.Tables["Source"].Select("parent_id=" + ((tn == null) ? "0" : tn.Tag.ToString().Substring(0, tn.Tag.ToString().Length - 1)));
                foreach (DataRow dr1 in dr)
                {
                    TreeNode tn1 = new TreeNode(dr1["Source_name"].ToString());
                    tn1.Tag = dr1["Source_id"].ToString() + dr1["Source_Class"].ToString();
                    tn1.ImageIndex = (dr1["Source_Class"].ToString() == "0") ? 0 : 2;
                    tn1.SelectedImageIndex = tn1.ImageIndex;
                    if (tn != null) tn.Nodes.Add(tn1);
                    else this.tvSource.Nodes.Add(tn1);
                    this.SetSourceClassTolvSource(tn1);
                }
            }