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;
}
}