using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace Original.Common { /// <summary> /// 将数据转换成easyui控件支持的数据格式 /// </summary> public static class JsonHelper { /// <summary> /// 将DataTable转换成Combobox支持的数据格式 /// </summary> /// <param name="dt">数据源DataTable</param> /// <param name="valueField">id字段名称</param> /// <param name="textField">text字段名称</param> /// <returns>json</returns> public static string DataTableToCombobox(DataTable dt, string valueField, string textField) { List<Combobox> lst = new List<Combobox>(); foreach (DataRow row in dt.Rows) { if (row[valueField] == DBNull.Value || row[textField] == DBNull.Value) { continue; } lst.Add(new Combobox() { id = row[valueField].ToString(), text = row[textField].ToString() }); } string json = JsonConvert.SerializeObject(lst); return json; } /// <summary> /// 将实体转换成json /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="t">实体实例</param> /// <returns>json</returns> public static string ModelToJson<T>(T t) { string json = JsonConvert.SerializeObject(t); return json; } /// <summary> /// DataTable转换成DataGrid数据格式 /// </summary> /// <param name="dt">数据源DataTable</param> /// <param name="iRecordCount">数据总记录数</param> /// <returns>json</returns> public static string DataTableToDataGrid(DataTable dt, int iRecordCount) { DataGrid dg = new DataGrid(); dg.total = iRecordCount.ToString(); dg.rows = dt; string dtJson = JsonConvert.SerializeObject(dg, new JsonConverter[] { new DataTableConverter() }); return dtJson; } /// <summary> /// DataTable转换成Combotree数据格式 /// </summary> /// <param name="dt">数据源DataTable</param> /// <param name="parentValue">一级节点的父ID值</param> /// <param name="idField">id字段名称</param> /// <param name="parentField">父字段名称</param> /// <param name="textField">显示值的字段名称</param> /// <returns>json</returns> public static string DataTableToCombotree(DataTable dt, string parentValue, string idField, string parentField, string textField) { List<Combotree> lstCombotree = new List<Combotree>(); BindTree(dt, null, parentValue, lstCombotree, idField, parentField, textField); string dtJson = JsonConvert.SerializeObject(lstCombotree); return dtJson; } #region 辅助方法 /// <summary> /// 构造Combotree结构数据 /// </summary> /// <param name="dtSource">DataTable数据源</param> /// <param name="parentNode">父结点</param> /// <param name="parentID">一级节点的父ID</param> /// <param name="ListCombotree">Combotree空列表</param> private static void BindTree(DataTable dtSource, Combotree parentNode, string parentID, List<Combotree> ListCombotree, string idField, string parentField, string textField) { DataRow[] rows = dtSource.Select(string.Format("{0}=‘{1}‘", parentField, parentID)); foreach (DataRow row in rows) { if (row[idField] == DBNull.Value || row[textField] == DBNull.Value) { continue; } Combotree node = new Combotree(); node.text = row[textField].ToString(); node.id = row[idField].ToString(); BindTree(dtSource, node, row[idField].ToString(), ListCombotree, idField, parentField, textField); if (parentNode == null) //(row[arg.parentid].ToString() == "-1") { // 一级数据 ListCombotree.Add(node); } else { // 子级数据 parentNode.children.Add(node); } } } #endregion } #region easyui 控件结构 /// <summary> /// Combobox /// </summary> [Serializable] public class Combobox { /// <summary> /// 值 /// </summary> public string id { get; set; } /// <summary> /// 显示的名称 /// </summary> public string text { get; set; } } /// <summary> /// Combobox /// </summary> [Serializable] public class Combotree { /// <summary> /// value的值 /// </summary> public string id { get; set; } /// <summary> /// text显示的值 /// </summary> public string text { get; set; } /// <summary> /// 子列表 /// </summary> public List<Combotree> children { get; set; } } /// <summary> /// DataGrid /// </summary> [Serializable] public class DataGrid { /// <summary> /// 数据总记录 /// </summary> public string total { get; set; } /// <summary> /// 数据源DataTable /// </summary> public DataTable rows { get; set; } } #endregion }
时间: 2024-10-27 03:02:04