最近做个小项目里面的涉及到权限的菜单 根据用户权限 读取相应的菜单树-----------数据库结构------------------
ID ParentID Name
1 0 顶级1
2 0 顶级2
3 0 顶级3
4 1 二级1
5 2 二级2
6 4 三级1
7 4 三级2
8 5 三级3
9 6 四级1如果是子节点 就输出 "leaf":true 否则就继续输出个节点children:[] 继续递归下去----------------生成的JSON大致效果---------------------------------
{"id":"1","text":"顶级1",children:[
{"id":"4","text":"二级1", children:[
{"id":"6","text":"三级1",children:[
{"id":"9","text":"四级1", "leaf":true}
]},
{"id":"7","text":"三级2", "leaf":true}
]}
] },
{"id":"2","text":"顶级2",children:[
{"id":"5","text":"二级2", children:[
{"id":"7","text":"三级3", "leaf":true}
]}
]},
{"id":"3","text":"顶级3","leaf":true}
------------------------------------------------- 在网上搜了这样的代码 代码有误 不管有没有子节点都会输出children:[] ---
请大家帮忙看看http://blog.csdn.net/shaily/article/details/4205135
public static string GetTasks(int TaskId)
{
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["Link"].ConnectionString))
{
conn.Open();
OleDbCommand comm = new OleDbCommand("select * from [Tasks]", conn);
OleDbDataAdapter ada = new OleDbDataAdapter();
DataTable table = new DataTable();
ada.Fill(table);
}
return "["+GetTasksString(TaskId,table)+"]";
} private static string GetTasksString(int TaskId,DataTable table)
{
DataRow[] rows = table.Select("ParentID="+TaskId.ToString()); if (rows.Length == 0) return string.Empty; ;
StringBuilder str = new StringBuilder();
foreach(DataRow row in rows)
{
str.Append("{");
for (int i = 0; i < row.Table.Columns.Count; i++)
{
if(i!=0)str.Append(",");
str.Append(row.Table.Columns[i].ColumnName);
str.Append(":'");
str.Append(row[i].ToString());
str.Append("'");
}
str.Append(",children:[");
str.Append(GetTasksString((int)row["TaskID"],table));
str.Append("]},");
}
return str[str.Length] == ',' ? str.ToString(0, str.Length - 1) : str.ToString();
ID ParentID Name
1 0 顶级1
2 0 顶级2
3 0 顶级3
4 1 二级1
5 2 二级2
6 4 三级1
7 4 三级2
8 5 三级3
9 6 四级1如果是子节点 就输出 "leaf":true 否则就继续输出个节点children:[] 继续递归下去----------------生成的JSON大致效果---------------------------------
{"id":"1","text":"顶级1",children:[
{"id":"4","text":"二级1", children:[
{"id":"6","text":"三级1",children:[
{"id":"9","text":"四级1", "leaf":true}
]},
{"id":"7","text":"三级2", "leaf":true}
]}
] },
{"id":"2","text":"顶级2",children:[
{"id":"5","text":"二级2", children:[
{"id":"7","text":"三级3", "leaf":true}
]}
]},
{"id":"3","text":"顶级3","leaf":true}
------------------------------------------------- 在网上搜了这样的代码 代码有误 不管有没有子节点都会输出children:[] ---
请大家帮忙看看http://blog.csdn.net/shaily/article/details/4205135
public static string GetTasks(int TaskId)
{
using (OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["Link"].ConnectionString))
{
conn.Open();
OleDbCommand comm = new OleDbCommand("select * from [Tasks]", conn);
OleDbDataAdapter ada = new OleDbDataAdapter();
DataTable table = new DataTable();
ada.Fill(table);
}
return "["+GetTasksString(TaskId,table)+"]";
} private static string GetTasksString(int TaskId,DataTable table)
{
DataRow[] rows = table.Select("ParentID="+TaskId.ToString()); if (rows.Length == 0) return string.Empty; ;
StringBuilder str = new StringBuilder();
foreach(DataRow row in rows)
{
str.Append("{");
for (int i = 0; i < row.Table.Columns.Count; i++)
{
if(i!=0)str.Append(",");
str.Append(row.Table.Columns[i].ColumnName);
str.Append(":'");
str.Append(row[i].ToString());
str.Append("'");
}
str.Append(",children:[");
str.Append(GetTasksString((int)row["TaskID"],table));
str.Append("]},");
}
return str[str.Length] == ',' ? str.ToString(0, str.Length - 1) : str.ToString();
之前加个判断就行
将数据库中的层次数据转换成多级JSON的完整解决方案请见:
http://www.iteye.com/topic/1119961