#region DataTable转EasyUiTree的Json格式
/// <summary>
/// DataTable转EasyUiTree的Json格式
/// </summary>
/// <param name="dt">要转化的表</param>
/// <param name="pField">父节点对应字段</param>
/// <param name="pValue">父节点的值,默认为"0"</param>
/// <param name="idField">ID对应的字段</param>
/// <param name="nameField">Name对应的字段</param>
/// <param name="isParentField">是否是父节点对应的字段</param>
/// <param name="isChooseParentNode">是否选择父节点,有单选框、复选框的时候用;true:checkbox radio 可以选择父节点/子节点;false:radio 只能选择叶子节点</param>
/// <returns></returns>
public static string DataTableToJsonElecViewTree(DataTable dt)
{
AlarmManagerBLL AlarmManagerSystemBLL = new AlarmManagerBLL();
StringBuilder sb = new StringBuilder();
string filter = string.Format("{0}='{1}'", "system_id", 0); //获取顶级目录
DataRow[] drs = dt.Select(filter);
if (drs.Length < 1)
{
return "";
}
sb.Append("[");
//拼接显示到前台
foreach (DataRow item in drs)
{
sb.Append("{");
sb.AppendFormat("\"id\":\"{0}\",", item["system_id"].ToString());
sb.AppendFormat("\"text\":\"{0}\"", item["system_name"].ToString());
//获取第二级children节点数据
string filterAlarm = string.Format("{0}='{1}'", "system_id", 3);
DataRow[] drAlarm = dt.Select(filterAlarm);
string systemid = drAlarm[0]["system_id"].ToString();
DataTable dtAlarm = AlarmManagerSystemBLL.GetSystemDomain(int.Parse(systemid));
//拼接到父节点下
if (dtAlarm.Rows.Count < 1)
{
return "";
}
else
{
sb.Append(",\"children\":[");
foreach (DataRow itemSon in dtAlarm.Rows)
{
sb.Append("{");
sb.AppendFormat("\"id\":\"{0}\",", itemSon["domain_id"].ToString());
sb.AppendFormat("\"text\":\"{0}\"", itemSon["domain_name"].ToString());
//获取第三级children把表中的Id取出来
string strDomainType = itemSon["domain_id"].ToString();
DataTable dtDomainType = AlarmManagerSystemBLL.GetDeviceType(int.Parse(strDomainType), int.Parse(systemid));
if (dtDomainType.Rows.Count >= 1)
{
sb.Append(",\"children\":[");
foreach (DataRow itemDomainType in dtDomainType.Rows)
{
sb.Append("{");
sb.AppendFormat("\"id\":\"{0}\",", itemDomainType["device_type_id"].ToString());
sb.AppendFormat("\"text\":\"{0}\"", itemDomainType["device_type_ch_name"].ToString());
//获取第四级children把表中的Id取出来
string strDeviceType = itemDomainType["device_type_id"].ToString();
DataTable dtDeviceType = AlarmManagerSystemBLL.GetDevice(int.Parse(strDeviceType), int.Parse(systemid));
if (dtDeviceType.Rows.Count >= 1)
{
sb.Append(",\"children\":[");
foreach (DataRow itemDeviceType in dtDeviceType.Rows)
{
sb.Append("{");
sb.AppendFormat("\"id\":\"{0}\",", itemDeviceType["device_id"].ToString());
sb.AppendFormat("\"text\":\"{0}\"", itemDeviceType["device_name"].ToString());
sb.Append("},");
}
//如果最后多一个“,”的话,就把它删掉
if (sb.ToString().EndsWith(","))
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append("]");
}
sb.Append("},");
}
//如果最后多一个“,”的话,就把它删掉
if (sb.ToString().EndsWith(","))
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append("]");
}
sb.Append("},");
}
//如果最后多一个“,”的话,就把它删掉
if (sb.ToString().EndsWith(","))
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append("]");
}
sb.Append("},");
}
//如果最后多一个“,”的话,就把它删掉
if (sb.ToString().EndsWith(","))
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append("]");
return sb.ToString();
}
#endregion
上面的代码是对如何将datatable格式的数据拼接easyui的树的学习,只是初步了解,如何灵活运用还需要进一步实践。主要的问题在于根据条件从datatable中筛选树的节点。另外就是要注意easyui-tree需要的格式,具体的easyui-tree的js以及html代码就不再展示。在编程的过程中站在巨人的肩膀上是很重要的前提条件,如果想进一步的提升自我,还需要多总结,编辑知识网。