一 无限层级Tree效果图

二 JSON获取
1 /// <summary>
2 /// 初始化Tree 数据
3 ///PID=ID 关联
4 /// </summary>
5 /// <param name="sender"></param>
6 /// <param name="e"></param>
7 private void btnTree_Click(object sender, EventArgs e)
8 {
9 DataTable newdtb = new DataTable();
10 newdtb.Columns.Add("ID", typeof(string));
11 newdtb.Columns.Add("Name", typeof(string));
12 newdtb.Columns.Add("PID", typeof(string));
13
14 DataRow newRow = newdtb.NewRow();
15 newRow = newdtb.NewRow();
16 newRow["ID"] = 1;
17 newRow["Name"] = "产品" + 1;
18 newRow["PID"] = 0;
19 newdtb.Rows.Add(newRow);
20
21
22 newRow = newdtb.NewRow();
23 newRow["ID"] = 1.1;
24 newRow["Name"] = "产品" + 1.1;
25 newRow["PID"] = 1;
26 newdtb.Rows.Add(newRow);
27
28 newRow = newdtb.NewRow();
29 newRow["ID"] = "1.1.1";
30 newRow["Name"] = "产品" + "1.1.1";
31 newRow["PID"] = "1.1";
32 newdtb.Rows.Add(newRow);
33
34 newRow = newdtb.NewRow();
35 newRow["ID"] = "1.1.1.1";
36 newRow["Name"] = "产品" + "1.1.1.1";
37 newRow["PID"] = "1.1.1";
38 newdtb.Rows.Add(newRow);
39
40 newRow = newdtb.NewRow();
41 newRow["ID"] = 1.2;
42 newRow["Name"] = "产品" + 1.2;
43 newRow["PID"] = 1;
44 newdtb.Rows.Add(newRow);
45
46 newRow = newdtb.NewRow();
47 newRow["ID"] = "1.2.1";
48 newRow["Name"] = "产品" + "1.2.1";
49 newRow["PID"] = "1.2";
50 newdtb.Rows.Add(newRow);
51
52 newRow = newdtb.NewRow();
53 newRow["ID"] = "1.2.1.1";
54 newRow["Name"] = "产品" + "1.2.1.1";
55 newRow["PID"] = "1.2.1";
56 newdtb.Rows.Add(newRow);
57
58 newRow = newdtb.NewRow();
59 newRow["ID"] = "1.2.1.1.1";
60 newRow["Name"] = "产品" + "1.2.1.1.1";
61 newRow["PID"] = "1.2.1.1";
62 newdtb.Rows.Add(newRow);
63
64
65 newdtb = new DataTable();
66 string result = GetJson("产品列表","0",newdtb, "PID", "0", "ID", "Name");
67
68 MessageBox.Show(result);
69 }
GetJson的具体实现,封装了添加根节点的方法,使用了递归的思想
1 /// <summary>
2 /// 获取Tree JSON(rootName 为空就是实际的根节点,不为空 可以添加虚拟节点)
3 /// </summary>
4 /// <param name="rootName">根节点名称</param>
5 /// <param name="rootID">根节点ID</param>
6 /// <param name="dt">要转化的表</param>
7 /// <param name="pField">表中的父节点字段</param>
8 /// <param name="pValue">表中顶层节点的值,没有 可以输入为0</param>
9 /// <param name="kField">关键字字段名称</param>
10 /// <param name="TextField">要显示的文本 对应的字段</param>
11 /// <returns></returns>
12 public string GetJson(string rootName, string rootID, DataTable dt, string pField, string pValue, string kField, string TextField)
13 {
14 string result = string.Empty;
15 if (rootName == "")
16 {
17 result = TableToTreeJson(dt, "PID", "0", "ID", "Name");
18 if (result.Length > 12)
19 {
20 result = result.Substring(12);
21 }
22 }
23 else
24 {
25 result += "[{";
26 result += string.Format("\"id\":\"{0}\",", rootID);
27 result += string.Format("\"text\":\"{0}\"", rootName);
28 result += TableToTreeJson(dt, "PID", "0", "ID", "Name");
29 result += "}]";
30 }
31
32 return result;
33 }
34
35 // <summary>
36 /// 递归将DataTable转化为适合jquery easy ui 控件tree ,combotree 的 json
37 /// 该方法最后还要 将结果稍微处理下,将最前面的,"children" 字符去掉.
38 /// </summary>
39 /// <param name="dt">要转化的表</param>
40 /// <param name="pField">表中的父节点字段</param>
41 /// <param name="pValue">表中顶层节点的值,没有 可以输入为0</param>
42 /// <param name="kField">关键字字段名称</param>
43 /// <param name="TextField">要显示的文本 对应的字段</param>
44 /// <returns></returns>
45 public static string TableToTreeJson(DataTable dt, string pField, string pValue, string kField, string TextField)
46 {
47 StringBuilder sb = new StringBuilder();
48 string filter = String.Format(" {0}='{1}' ", pField, pValue);//获取顶级目录.
49 DataRow[] drs = dt.Select(filter);
50 if (drs.Length < 1)
51 return "";
52 sb.Append(",\"children\":[");
53 foreach (DataRow dr in drs)
54 {
55 string pcv = dr[kField].ToString();
56 sb.Append("{");
57 sb.AppendFormat("\"id\":\"{0}\",", dr[kField].ToString());
58 sb.AppendFormat("\"text\":\"{0}\"", dr[TextField].ToString());
59 sb.Append(TableToTreeJson(dt, pField, pcv, kField, TextField).TrimEnd(','));
60 sb.Append("},");
61 }
62 if (sb.ToString().EndsWith(","))
63 {
64 sb.Remove(sb.Length - 1, 1);
65 }
66 sb.Append("]");
67 return sb.ToString();
68 }
三 相关的下载
ligerUI.Demos.Tree2.rar