我sql数据库中有个存储着一个树结构,如表A(id,full,title)
id 为编号,full为树的节点,title为节点的名称。如果第1条数据full字段数据为2位,就为树的一个节点。第2条数据4位,前2位字符=第1条数据,那么第2条数据就是第1条数据的子节点。以此类推!full数据绝对唯一!例子如下:A表
 id   full   title
  1    **     科目
  2    **22   数学
  3    **33   语文
  4    **3399 几何
  5    aa     成绩
  6    aabb   成绩1
树就如下:
    科目
      数学
      语文
         几何
    成绩
      成绩1请问怎么动态添加TreeView,希望大家帮我搞定这棵树。我是不会啊!!
  
 

解决方案 »

  1.   

    用递归实现
    也可以用非递归,详细自己看
    http://dev.csdn.net/author/shadowsky/231d27652a414acba8e0e03260ad4339.html
      

  2.   

    找递归的例子研究阿,还可从存储过程加载树,
    代码太长,随便贴点。//函数递归调用加载树,
    //-------------在窗体初始化时,根据数据库中的记录创建树形图----------------
    private void SetOrgInfo_Load(object sender, System.EventArgs e)
    {
                 this.bdbomnode_sqlDataAdapter1.Fill(tblSetOrgInfo);//读入数据
    //sqlgood.SetOrgInfo.bdbomnoderecInfoSqlDataAdapter1.Fill(bdbomnoderecInfo);
                DataTable tempDataTable = tblSetOrgInfo.Copy();//将组织机构表另存一份为tempDataTable
    DataView viewSetOrgInfo = new DataView(tempDataTable);//新建一个数据视图
    viewSetOrgInfo.RowFilter = "ItemLevel = 0";
    //将数据集中的所有记录逐个根据他们之间的关系添加到树形表中去
    if (viewSetOrgInfo.Count > 0)
    {
    foreach (DataRowView myRow in viewSetOrgInfo)
    {
    string strEnterpriseName = myRow["节点名称"].ToString().Trim();
    //此处是添加第一个节点“省医药集团”
    this.treeView1.Nodes.Add(new TreeNode(strEnterpriseName));
    //此处初始化参数是第一个节点“省医药集团”,然后该函数会递归添加所有子节点
    PopulateTreeView(strEnterpriseName,treeView1.Nodes[0],myRow);

    treeView1.SelectedNode = treeView1.Nodes[0]; //选中第一个节点 
    }
    } }

    //---------------根据输入的节点信息,递归调用最终添加所有的节点-----------------------
    private void PopulateTreeView(string parentPart,TreeNode parentNode,DataRowView parentRow)
    {
    string strEnterpriseName = "";
    DataTable tempDataTable = tblSetOrgInfo.Copy();
    DataView viewSetOrgInfo = new DataView(tempDataTable);

    //筛选获得当前传递过来的节点的子项,并将其添加到树形图中
    //判断方法是凡parentIndex等于传递过来的节点的absIndex的,就是该节点的子项
    viewSetOrgInfo.RowFilter = "ParentIndex = '" + parentRow["AbsIndex"].ToString().Trim() + "'";
    //递归的添加每一个节点的所有子节点
    foreach (DataRowView myRow in viewSetOrgInfo)  
    {
    strEnterpriseName = myRow["节点名称"].ToString().Trim();
    TreeNode myNode = new TreeNode(strEnterpriseName);
    parentNode.Nodes.Add(myNode);
    if (myRow["节点还是文件"].ToString().Trim() == "0" )
    //myNode.ImageIndex=3;
    {  
    myNode.ForeColor=Color.Blue;
    }
    if (myRow["节点还是文件"].ToString().Trim() == "3" )
    //myNode.ImageIndex=3;
    {  
    myNode.ForeColor=Color.Green;
    }
    //函数递归调用,将所有节点按顺序添加完毕
    PopulateTreeView(strEnterpriseName,myNode,myRow); 
    }
    }