protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{
ListMenu();
}
}

protected string _menu = string.Empty;
public void ListMenu()
{
StringBuilder sb = new StringBuilder();
DataTable _list = new DataTable();
string ConctionStr = "Data Source=127.0.0.1;Initial Catalog=AccordMenu;Integrated Security=False;User ID=sa;Password=sa";
using (SqlConnection conec = new SqlConnection(ConctionStr))
{
conec.Open();
string SqlText = "SELECT * FROM sys_menu";
SqlCommand Comand = new SqlCommand(SqlText, conec);
SqlDataAdapter Adaper = new SqlDataAdapter(Comand);
Adaper.Fill(_list);
Adaper.Dispose();
Comand.Dispose();
conec.Close();
}
DataRow[] rows = _list.Select("ParentID=0");
sb.Append("[");
bool isFist = false;
foreach (DataRow dr in rows)
{
if (isFist)
sb.Append(",");
isFist = true;
string id = dr["ID"].ToString();
sb.Append("{");
sb.AppendFormat("\"id\":\"{0}\",", dr["ID"]);
sb.AppendFormat("\"text\":\"{0}\",", dr["MenuName"]);
sb.AppendFormat("\"pid\":\"{0}\",", dr["ParentID"]);
sb.AppendFormat("\"iconCls\":\"icon_{0}\",", dr["Menu_ICON"]);
sb.AppendFormat("\"ICON_ID\":\"{0}\",", dr["Menu_ICON"]);
sb.AppendFormat("\"url\":\"{0}\",", dr["Menu_URL"]);
sb.AppendFormat("\"ICON_URL\":\"{0}\"", dr["ICON_URL"]);
sb.Append(",children:[");
sb.Append(GetSubMenu(id, _list));
sb.Append("]");
sb.Append("}");
}
sb.Append("]");
_menu = sb.ToString();

}

/// <summary>
/// 递归调用生成无限级别
/// </summary>
/// <param name="pid"></param>
/// <param name="dt"></param>
/// <returns></returns>
private string GetSubMenu(string pid, DataTable dt)
{
StringBuilder sb = new StringBuilder();
DataRow[] rows = dt.Select("ParentID=" + pid);
if (rows.Length > 0)
{
bool isFist = false;
foreach (DataRow dr in rows)
{
if (isFist)
sb.Append(",");
isFist = true;
string id = dr["ID"].ToString();
sb.Append("{");
sb.AppendFormat("\"id\":\"{0}\",", dr["ID"]);
sb.AppendFormat("\"text\":\"{0}\",", dr["MenuName"]);
sb.AppendFormat("\"pid\":\"{0}\",", dr["ParentID"]);
sb.AppendFormat("\"iconCls\":\"icon_{0}\",", dr["Menu_ICON"]);
sb.AppendFormat("\"ICON_ID\":\"{0}\",", dr["Menu_ICON"]);
sb.AppendFormat("\"url\":\"{0}\",", dr["Menu_URL"]);
sb.AppendFormat("\"ICON_URL\":\"{0}\"", dr["ICON_URL"]);
sb.Append(",children:[");
sb.Append(GetSubMenu(id, dt));
sb.Append("]");
sb.Append("}");
}
}
return sb.ToString();
}

将DataTable生成树json的更多相关文章

  1. 靠谱的datatable转json方法

    今天有之前同事问我要datatable转json的方法,以前自己也弄过,但感觉网上有很多不靠谱的方法.所以自己在博客里记录一个,当然也是网上找的,但是这个靠谱一点,起码可以用不会报错,所以叫他靠谱的d ...

  2. DataTable转Json字符串(使用Newtonsoft.Json.dll)

    DataTable转Json字符串(使用Newtonsoft.Json.dll) 在需要把DataTable转为Json字符串时,自己手动拼接太麻烦,而且容易出错,费时费力,使用Newtonsoft. ...

  3. DataTable 和Json 字符串互转

    #region DataTable 转换为Json字符串实例方法 /// <summary> /// GetClassTypeJosn 的摘要说明 /// </summary> ...

  4. [C#]Datatable和json互相转换操作

    #region DataTable 转换为Json字符串实例方法 /// <summary> /// GetClassTypeJosn 的摘要说明 /// </summary> ...

  5. Datatable转换Json

    #region Datatable转换为Json        /// <summary>         /// Datatable转换为Json         /// </su ...

  6. C#中把Datatable转换为Json的5个代码实例

    一. /// <summary> /// Datatable转换为Json /// </summary> /// <param name="table" ...

  7. JSON之Asp.net MVC C#对象转JSON,DataTable转JSON,List转JSON,JSON转List,JSON转C#对象

    一.JSON解析与字符串化 JSON.stringify() 序列化对象.数组或原始值 语法:JSON.stringify(o,filter,indent) o,要转换成JSON的对象.数组或原始值 ...

  8. C#中DataTable转换JSON

    #region 将DataTable转换为json public string dt2json(DataTable dt) { JavaScriptSerializer jss = new JavaS ...

  9. DataTable转json字符串,jQuery.parseJSON()把json字符串转为标准的json对象格式

    1.string res = DataTableToJson.DataTable2Json(dt);讲DataTable转换为json字符串 http://www.365mini.com/page/j ...

随机推荐

  1. javascript-桥接模式

    桥接模式 1.在系统沿着多个维度变化的同时,又不增加其复杂度并以达到解耦 2.最主要特点:将实现层(如元素绑定的事件)与抽象层(如修饰页面UI逻辑)解耦分离,使两部分独立变化 3.避免需求的改变造成对 ...

  2. SQL Server 2008 R2——根据数据查找表名和字段名 根据脏数据定位表和字段

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  3. oracle 使用 dbms_lock.sleep暂停存储过程执行

    grant execute on dbms_lock to USERNAME;   dbms_lock.sleep(time)参数单位为秒   create or replace procedure ...

  4. mysql sum 和 count 函数 合并使用

    SELECT sum(start) as total, count(start) as rows FROM table where....

  5. 使用ab进行压力测试详解

    ab是apache自带的压力测试工具,非常好用.转载几篇对ab工具的详细使用的博文.猛击下面的链接地址 http://www.365mini.com/page/apache-benchmark.htm ...

  6. 理解 OpenStack + Ceph (9): Ceph 的size/min_size/choose/chooseleaf/scrubbing/repair 等概念

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  7. Shell基础学习小结

    0 shell基础概念 Shell是解释性语言,使用脚本编程语言的好处是,它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象:缺点是它们的效率通常不如编译型语言.Shell命令有本 ...

  8. java进程占用CPU资源过高分析脚本

    #!/bin/bash #输入占用CPU较高的进程号 pid=$ if [ -z $pid ] then echo "PID is NULL" exit fi #找到该进程中占用较 ...

  9. httpclient进行basic auth认证

    private HttpClientContext context = HttpClientContext.create(); public void addUserOAuth(String user ...

  10. HashSet和TreeSet

    package com.wzy.list; import java.util.HashSet; import java.util.Iterator; import java.util.Set; imp ...