using System; using System.Collections.Generic; using System.Collections; using System.Data.Common; using System.Web.Script.Serialization; using CYQ.Data; using CYQ.Data.Table; public class JsonByEasyUI { /// <summary> /// MDataTable转json /// </summary> /// <param name="table"></param> /// <returns></returns> public static string JSONForGrid(MDataTable table) { return table.ToJson(); } /// <summary> /// 输出json树型格式 /// </summary> /// <param name="table"></param> /// <param name="id"></param> /// <param name="pid"></param> /// <returns></returns> public static string JSONForTree(MDataTable table, string id, string pid) { string json = string.Empty; object obj = JsonByEasyUI.ArrayToTreeData(table, id, pid); return new JavaScriptSerializer().Serialize(obj); } /// <summary> /// 获取指定ID的所有上级id,已","分隔 /// </summary> /// <param name="table">表名</param> /// <param name="id">id</param> /// <param name="pid">pid</param> /// <param name="idnum">检索id</param> /// <returns></returns> public static string GetPath(string table, string id, string pid, int idnum) { string path = ""; int Jpid = 0; using (MAction action = new MAction(table)) { if (action.Fill(idnum)) { Jpid = action.Get<int>(pid); } } if (Jpid == 0) { path = "0," + idnum.ToString() + ","; } else { if (Jpid != 0) { path = GetPath(table, id, pid, Jpid); } path += Jpid.ToString() + "," + idnum.ToString() + ","; } path = StringHelper.GetArrayStr(StringHelper.GetSubStringList(path, ','), ","); //去重 return path; } /// <summary> /// 获取树格式对象 /// </summary> /// <param name="list">线性数据</param> /// <param name="id">ID的字段名</param> /// <param name="pid">PID的字段名</param> /// <returns></returns> private static object ArrayToTreeData(MDataTable table, string id, string pid) { var list = MDataTableToHash(table); var h = new Hashtable(); //数据索引 var r = new List<Hashtable>(); //数据池,要返回的 foreach (var item in list) { if (!item.ContainsKey(id)) continue; h[item[id].ToString()] = item; } foreach (var item in list) { if (!item.ContainsKey(id)) continue; if (!item.ContainsKey(pid) || item[pid] == null || !h.ContainsKey(item[pid].ToString())) { r.Add(item); } else { var pitem = h[item[pid].ToString()] as Hashtable; if (!pitem.ContainsKey("children")) pitem["children"] = new List<Hashtable>(); var children = pitem["children"] as List<Hashtable>; children.Add(item); } } return r; } /// <summary> /// 将MDataTable转换为Hashtable列表 /// </summary> /// <param name="reader"></param> /// <returns></returns> private static List<Hashtable> MDataTableToHash(MDataTable table) { var list = new List<Hashtable>(); foreach (MDataRow row in table.Rows) { var item = new Hashtable(); for (int i = 0; i < table.FieldCount; i++) { var name = table.Columns[i].ColumnName; //列名 var value = row[i].Value; //单元格值 item[name] = value; } list.Add(item); } return list; } }