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},
...]
树递归
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},
...]
树递归
http://www.cnblogs.com/SunYu/archive/2010/04/29/1724367.html
对于原始数据的处理,可以先按照 p_f_id排序,相同的放一起,先取出最小的,也就是顶级的,装入列表中,然后去下一个级别的 p_f_id数据,并从列表中找到对应的相同code值匹配,进行处理,依次类推。
感谢楼上。是Json的格式,有点明白是啥意思了,能写点实例学习吗?
/// <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;
}