[原创]c# 递归 无穷树 easyui json例子无敌


发布时间:2015/1/5 14:26:35  次浏览  作者:admin

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using NetWing.Common.Data;
using NetWing.Common.Data.SQLServer;

namespace NetWingManager
{
    public partial class testtree : System.Web.UI.Page
    {
        public string nodes = string.Empty;
        protected void Page_Load(object sender, EventArgs e)
        {
            DataTable dt = SqlEasy.ExecuteDataTable("select * from Co_ItemNameSet ");
            GetAllNodes(0,dt);
            Response.Write("[" + nodes + "]");//加}是为了闭合
   

        }
        /// <summary>
        /// 根据DataTable生成Json树结构
        /// </summary>
        /// <param name="dt">数据源</param>
        /// <param name="pid">父ID</param>
        public void GetAllNodes(int pid,DataTable dt)
        {

            DataRow[] drs = dt.Select("parentitemid=" + pid);
            if (drs.Length <= 0) return;
            int i = 1;
            foreach (DataRow dr in drs)
            {
                //nodes += "总"+drs.Length+"{\"itemname\":"+"\""+dr["itemname"].ToString() +"\""+ "}第"+i;
                nodes += "{\"itemid\":\"" + dr["itemid"].ToString() + "\",\"itemname\":" + "\"" + dr["itemname"].ToString() + "\"";
      
                DataRow[] drc = dt.Select("parentitemid=" + dr["itemid"].ToString());
                if (drc.Length > 0) //假如大于0 说明有子集
                {
                    nodes += ",\"children\":[";
                    GetAllNodes(int.Parse(dr["itemid"].ToString()), dt);//递归 就是自己调用自己
                    nodes += "]";//子集直接在这里封口
                }

                if (i < drs.Length)//如果datarow没有循环完
                {
                    nodes += "},";//循环没有完不封口
                }
                else
                {
                    nodes += "}";//循环完了封口
                }
                i = i + 1;
                
            }
        }
    }
}