C#中要对一数据表进行数据树状格式化,请教各位XDJM们,先谢了!datatable t1 数据如下
f_id    f_name    p_f_id
1       A         0
2       B         0
3       D         1
4       C         1
8       H         5
5       G         4
6       E         2
7       F         0
11      K         5
...想要得到如下数据格式串:
[{id:1,pid=0,name=A,code=1},
{id:11,pid=1,name=D,code=3},
{id:12,pid=1,name=C,code=4},
{id:121,pid=12,name=G,code=5},
{id:1211,pid=121,name=H,code=8},
{id:1212,pid=121,name=K,code=11},
{id:2,pid=0,name=B,code=2},
{id:21,pid=2,name=E,code=6},
{id:3,pid=0,name=F,code=7},
...]
递归

解决方案 »

  1.   

    在datatable中就可以,不用在组织成字符串
    http://www.cnblogs.com/SunYu/archive/2010/04/29/1724367.html
      

  2.   

    你百度一下,什么都有,TreeView递归
      

  3.   

    baidu找了很久,不到正对性的,才来这里请教。
      

  4.   

    你的数据是Json格式的,那么只要定义一个类来表示每个项即可。
    对于原始数据的处理,可以先按照 p_f_id排序,相同的放一起,先取出最小的,也就是顶级的,装入列表中,然后去下一个级别的 p_f_id数据,并从列表中找到对应的相同code值匹配,进行处理,依次类推。
      

  5.   


    感谢楼上。是Json的格式,有点明白是啥意思了,能写点实例学习吗?
      

  6.   

    根据上面几楼的建议,自己baidu后研究了一下递归,终于做出来了,感谢上面的支持。
            /// <summary>
            /// 递归DataSet拼ZTREE所用的Json数据格式
            /// </summary>
            /// <param name="ds"></param>
            /// <returns></returns>
            private void InitTree(DataTable dt, int parentId, string nodeId, string nodeParentId, bool isRoot)
            {            
                DataView dv = new DataView(dt);
                Func f = null;
                int i = 1;
                int j = 0;            dv.RowFilter = String.Format("Parent_Func_Id={0}", parentId);            foreach (DataRowView drv in dv)
                {
                    f = new Func();                f.IdFunc = (int)drv["id_func"];
                    f.IdAuth = (int)drv["id_auth"];
                    f.NameFunc = (string)drv["name_func"];
                    f.ParentFuncId = (int)drv["parent_func_id"];
                    
                    //isRoot!=true的时候做递归,去找下面的所有子层。
                    if (isRoot == true)
                    {
                        f.NodeId = (StrToInt(nodeId)+j).ToString();
                        f.NodeParentId = nodeParentId;
                    }
                    else
                    {
                        f.NodeId = nodeId + i.ToString();
                        f.NodeParentId = nodeId;
                    }
                    
                    lstFunc.Add(f);                sJson += GetJaonRow(f);
                    i++;                InitTree(dt, (int)drv["id_func"], f.NodeId, nodeId,false);
                    j++;
                    
                }
            }        protected string GetJaonRow(Func f) 
            {
                string row = "";
                row = ",{";
                row += "\"id\":" + "\"" + f.NodeId + "\"";
                row += ",\"pId\":" + "\"" + f.NodeParentId + "\"";
                row += ",\"name\":" + "\"" + f.NameFunc + "\"";
                row += "}";            return row;        
            }