table按照层次关系排列后放进另一个空的table里方便我输出.???
是先序遍历,还是中序,还是后序?

解决方案 »

  1.   

    涉及到查数据库,最好不要用递归来查库。
    可以先用一个查询将数据查出,用Dataset来保存,然后对ds来查。大概算法:函数(id)//找子节点
    {
      得到子节点;
      if(id有子节点)
      {
        for(每个子节点:ids)
        {
          将ids插入到目标表中;
          调用 函数(ids);
        }
      }
    }
      

  2.   

    只对这个DataTable操作,不操作数据库
      

  3.   

    函数(DataSet)//找子节点
    {
    取得第个条记录
    if(id有子节点)
      {
        for(每个子节点:ids)
        {
          将ids插入到目标表中;
          调用 函数(ids);
        }
      }
    }
      

  4.   

    这样写可以吗?
    private void CngTable(int id,DataTable rtn)
    {
            DataTable itemtable=rtn;
            int rid=id;      if(itemtable.Rows.Count!=0)
    {
    for(int i=0;i<itemtable.Rows.Count;i++)
    {
        if(Convert.ToInt32(itemtable.Rows[i]["UpID"])==rid)
          {
    newtable.Rows.Add(itemtable.Rows[i]);
    rid=Convert.ToInt32(itemtable.Rows[i]["ID"]);
    itemtable.Rows[i].Delete;
    CngTable(rid,itemtable);       }
    }
             }
    }
      

  5.   

    假设表中只用 ID和UpID两个字段。可以假设如果是根节点,则UpID = 0private DataTable dt_Data //数据表,在调用CngTable之前先将数据查出保存//f_dtObj 是用来保存所查到数据,在调用该函数前对其初始化
    private void CngTable(int id,ref DateTable f_dtObj)
    {
      DataRow[] l_drs = dt_Data.Select("UpID = " + id.ToString());
      for(int i=0;i<l_drs.Length;i++)
      {
         DataRow i_dr = f_dtObj.NewRow();
         int i_id = (int)i_drs[i]["ID"];
         i_dr["ID"] = i_id;
         i_dr["UpID"] = l_drs[i]["UpId"];
         f_dtObj.Rows.Add(i_dr);
         CngTable(i_id,f_dtObj)
      }
    }大概写了一下,试试看
      

  6.   

    此处其实可以这样设计:
    对于树结构的数据,可以在数据库中加一能够表示层级结构的字段,来提高代码的方便性
    比如,
    100
    100101
    100102
    101
    101101
    101102
    这样需要在插入数据时进行编码,取数据就很方便。
    取子节点就可以用 like 方式,排序也方便。
    如果此数据在诸多地方使用(比如功能权限之类的),这样就比较好。
      

  7.   

    谢谢!还有,我这样写,为什么插不进新表呀?错误提示说"该行已经属于另一个表。"
    private void CngTable(int id,ref DataTable newtable)
    {
    int rid=0;DataRow[] l_drs = itemtable.Select("UpID = " + id.ToString());
    for(int i=0;i<l_drs.Length;i++)
    {
    string dd=Convert.ToString(l_drs[i]["Title"]);
    newtable.Rows.Add(l_drs[i]);
    rid=Convert.ToInt32(l_drs[i]["ID"]);
    CngTable(rid,ref newtable); }}
      

  8.   

    搞定了,十分感谢 cqzhangq(空空).发分