如下面的结构,也是最常见的区域、树结构类型。
id  name      parentid
0   根节点      0
1   a           0
2   b           0
3   aa          1
4   bb          2
5   aaa         3数据集数量不确定。根据数据库动态取出。
根据以上数据,转换成以下格式存进datatable.
列1       列2       列3    列4
0         a         aa     aaa
0         b         bb          

解决方案 »

  1.   

    要节点ID确定为0,
    其他兄弟、子节点的数量都不确定。
    datatable的列数量就是根据上面 那棵树的根节点到最子节点的数量确定。。
      

  2.   

    sql应该可以实现,楼主用的什么数据库
      

  3.   

    要节点ID确定为0,=====>根节点
      

  4.   

    0   根节点      0
    1   a           0
    2   b           0
    3   aa          1
    4   bb          2
    5   aaa         3发现个问题,如果有这样几条记录,你的DataTable里怎么存放呢?6 aa1          3
    7 aa2          3
    8   bb1          2
    9   bb2          2
      

  5.   

    根据parentid来递归实现,时间关系,不写了。呵呵
      

  6.   

    看在200分的份上,勉为其难的帮下LZ    public DataTable theDT;
        public DataTable newDT=new DataTable();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                theDT = new DataTable();
                theDT.Columns.Add("id");
                theDT.Columns.Add("name");
                theDT.Columns.Add("parentid");
                theDT.Rows.Add(new string[] {"0","根目录","0"});
                theDT.Rows.Add(new string[] { "1", "a", "0" });
                theDT.Rows.Add(new string[] { "2", "b", "0" });
                theDT.Rows.Add(new string[] { "3", "aa", "1" });
                theDT.Rows.Add(new string[] { "4", "bb", "2" });
                theDT.Rows.Add(new string[] { "5", "aaa", "3" });
                setNewTable("0", "根目录", 1);
                foreach (DataRow row in newDT.Rows)
                {
                    foreach (DataColumn col in newDT.Columns)
                    {
                        Response.Write(row[col.ColumnName].ToString()+ ",");
                    }
                    Response.Write("<br/>");
                }
                Response.End();
            }
        }
        private void setNewTable(string parentID,string path, int leve)
        {
            if (leve > newDT.Columns.Count)
            {
                newDT.Columns.Add("Ex" + leve);
            }
            DataRow[] rows = theDT.Select("id<>'0' and parentid='" + parentID +"'");
            if (rows.Length > 0)
            {
                foreach (DataRow row in rows)
                {
                    setNewTable(row["id"].ToString(), path + "," + row["name"].ToString(), leve + 1);
                }
            }
            else
            {
                DataRow row = newDT.NewRow();
                string[] items = path.Split(',');
                for (int i = 0; i < items.Length; i++)
                {
                    row[i] = items[i];
                }
                newDT.Rows.Add(row);
            }
        }
      

  7.   

    select t1.parentid,[1] AS '列1',[2] AS '列2',[3] AS '列3' from [Table] t1 
    inner join [Table] t2 on t1.name like t2.name + '%'
    where t2.parentid=0
    PIVOT(Min(t1.name) FOR t1.id IN([1],[2],[3])) AS PVT