<%@ WebHandler Language="C#" Class="InventoryClass" %> using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using Newtonsoft.Json; public class InventoryClass : IHttpHandler
{
DataTable dt = new DataTable();
string json = string.Empty;
public void ProcessRequest(HttpContext context)
{
//选取所有成品类别
using (SqlConnection conn = new SqlConnection(DB.ConnectionStrings.U8))
using (SqlCommand cmd = new SqlCommand("SELECT cInvCCode as id ,cInvCCode + ' ' + cInvCName as text,iInvCGrade ,bInvCEnd FROM InventoryClass WHERE cInvCCode LIKE 'A%' order by cInvCCode", conn))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
conn.Open();
da.Fill(dt);
//第一个成品类别是A开头,级别为1
getJson("A%", 1);
context.Response.Write(json.Substring(11, json.Length - 13));
}
} void getJson(string filter, int iInvCGrade)
{
//筛选下一级的分类
DataView dv = new DataView(dt, @"id like '" + filter + "' and iInvCGrade = " + iInvCGrade.ToString(), "", DataViewRowState.CurrentRows);
if (dv.Count > 0)
{
//添加children
if (!string.IsNullOrEmpty(json))
{
json = json.TrimEnd(',').TrimEnd('}') + ",\"children\":[";
}
else
{
json += "\"children\":[";
}
//循环每一行
for (int i = 0; i < dv.Count; i++)
{
//JsonConvert用DataTable比较方便
DataTable dt2 = dt.Clone();
dt2.ImportRow(dv[i].Row);
string s = JsonConvert.SerializeObject(dt2);
json += s.Remove(0, 1).TrimEnd(']') + ","; //移除前后的[],并加上,
//递归获取下级分类
getJson(dv[i]["id"].ToString() + "%", iInvCGrade + 1);
dt2.Clear();
}
//本层循环完成后去掉后面的,并加上]},
json = json.TrimEnd(',') + "]},";
}
} public bool IsReusable
{
get
{
return false;
}
} }
生成的JSON可以用于JSON树、下拉列表、网格等
生成树效果: