刚接触Easy UI,很多东西还是粗放式的,望理解。
后台采用的是ahsx
代码如下:
Handler.ashx
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
string method = context.Request["action"];
switch (method)
{
case "GetModule":
{
string a = context.Request.Params["id"];//参数为id
TreeViewCommon treeViewCommon = new TreeViewCommon();
context.Response.Write(treeViewCommon.GetModule());
break;
}
default:
break;
}
}
public bool IsReusable {
get {
return false;
}
}
}
Cs文件如下:TreeViewCommon.cs
{
string sql = "SELECT m.ID, m.Name, m.ParentID, m.Url, m.Ico FROM Module m ORDER BY m.Level, m.[Index]";
DataTable dt = GetTable(sql);
return TableToEasyUITreeJson(dt, "ParentID", "0", "ID", "Name").Substring(12);
}
/// <summary>
/// 递归将DataTable转化为适合jquery easy ui 控件tree ,combotree 的 json
/// 该方法最后还要 将结果稍微处理下,将最前面的,"children" 字符去掉.
/// </summary>
/// <param name="dt">要转化的表</param>
/// <param name="pField">表中的父节点字段</param>
/// <param name="pValue">表中顶层节点的值,没有 可以输入为0</param>
/// <param name="kField">关键字字段名称</param>
/// <param name="TextField">要显示的文本 对应的字段</param>
/// <returns></returns>
public static string TableToEasyUITreeJson(DataTable dt, string pField, string pValue, string kField, string TextField)
{
StringBuilder sb = new StringBuilder();
string filter = String.Format(" {0}='{1}' ", pField, pValue);//获取顶级目录.
DataRow[] drs = dt.Select(filter);
if (drs.Length < 1)
return "";
sb.Append(",\"children\":[");
foreach (DataRow dr in drs)
{
string pcv = dr[kField].ToString();
sb.Append("{");
sb.AppendFormat("\"id\":\"{0}\",", dr[kField].ToString());
sb.AppendFormat("\"text\":\"{0}\"", dr[TextField].ToString());
sb.Append(TableToEasyUITreeJson(dt, pField, pcv, kField, TextField).TrimEnd(','));
sb.Append("},");
}
if (sb.ToString().EndsWith(","))
{
sb.Remove(sb.Length - 1, 1);
}
sb.Append("]");
return sb.ToString();
}
aspx文件如下:
加入:
<ul id="mytree" class="easyui-tree"></ul>
tree.js文件如下
$(function () {
$('#mytree').tree({
// data: eval(dd)
// onClick: function (node) {
// $('#mytree').tree('beginEdit', node.target);
// }
url: 'Handler.ashx?action=GetModule'
});
});
第二种方式,运用扩展实现一步加载
扩展内容如下:
(function () { ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //地址:http://git.oschina.net/gson/jeasyuicn-ext/tree/master/ext.easyui/ext.tree/properties.loader //用法: //*带参数初始化 //$("#tree").tree({ // url:'tree.do' // queryParams:{pid:1} //}); //*参数变更 //$("#tree").tree("setQueryParams",{pid:1}); //重写tree的loader $.extend($.fn.tree.defaults, { loader: function (param, success, error) { var opts = $(this).tree("options"); if (!opts.url) { return false; } if (opts.queryParams) { param = $.extend({}, opts.queryParams, param); } $.ajax({ type: opts.method, url: opts.url, data: JSON2.stringify(param), dataType: "text", contentType: "application/json; charset=utf-8", //application/json success: function (data) { success(JSON2.parse(data)); }, error: function () { error.apply(this, arguments); } }); }, queryParams: {} }); //设置参数 $.extend($.fn.tree.methods, { setQueryParams: function (jq, params) { return jq.each(function () { $(this).tree("options").queryParams = params; }); } }); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// })(jQuery);
调用方法如下:
//运用扩展实现Tree的异步加载 //$("#menu").tree("setQueryParams", { "parentID": 0 }); $("#menu").tree({ url: 'http://ehlccs.cn/ControlServices.svc/GetAsynEasyTree', queryParams: { "parentID": 0 }, loadFilter: function (data) { //loadFilter 用于webServices、服务等【因为前面多个d】 if (data.d) { return eval('(' + data.d + ')'); } else { return eval('(' + data + ')'); } }, onBeforeExpand: function (node) { $("#menu").tree("setQueryParams", { "parentID": node.id }); $('#menu').tree('options').url = "http://ehlccs.cn/ControlServices.svc/GetAsynEasyTree"; } });
数据层方法:
/// <summary> /// 获取菜单信息,异步加载Tree /// </summary> /// <param name="parentID">ParentID</param> /// <returns></returns> public DataTable GetAsynTree(long parentID) { var dataManager = new DataManager("TreeDB", "GetAsynTree"); IOHelper.WriteLine(@"E:\a.txt", parentID.ToString()); dataManager.SetParameters("@ParentID", Convert.ToInt64(parentID)); DataTable dt = new DataTable(); dataManager.ExecuteDataTable(dt); return dt; } #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> /// <param name="url">url对应字段,可以为null ""</param> /// <param name="icon">图片对应字段,可以为null ""</param> /// <returns></returns> private static string CartDataTableToTreeJson1(DataTable dt, string pField, string pValue, string idField, string nameField, string isParentField, bool? isChooseParentNode, string url, string icon) { StringBuilder sb = new StringBuilder(); string filter = String.Format(" {0}={1} ", pField, pValue); //获取顶级目录. DataRow[] drs = dt.Select(filter); if (drs.Length < 1) return ""; sb.Append(",\"children\":["); foreach (DataRow dr in drs) { IOHelper.WriteLine(@"E:\a.txt", dr[idField].ToString()); string pcv = dr[idField].ToString(); sb.Append("{"); string strIsParent = dr[isParentField].ToString().Trim().ToLower(); //string strIsParent = "false"; if (strIsParent.Equals("true")) { if (!string.IsNullOrWhiteSpace(url)) { sb.AppendFormat("\"id\":\"{0}\",", dr[idField].ToString().Trim() + "," + dr[url].ToString().Trim()); } else { sb.AppendFormat("\"id\":\"{0}\",", dr[idField].ToString().Trim()); } } else { sb.AppendFormat("\"id\":\"{0}\",", dr[idField].ToString().Trim()); } sb.AppendFormat("\"text\":\"{0}\",", dr[nameField].ToString().Trim()); if (!string.IsNullOrWhiteSpace(icon)) sb.AppendFormat("\"iconCls\":\"{0}\",", dr[icon].ToString().Trim()); //if (strIsParent.Equals("false")) // if (!string.IsNullOrWhiteSpace(url)) // { // sb.Append("\"attributes\":{"); // sb.AppendFormat("\"url\":\"{0}\",", dr[url].ToString().Trim()); // sb.Append("},"); // } //if (isChooseParentNode.Equals(false)) // if (strIsParent.Equals("true")) // sb.AppendFormat("\"nocheck\":\"{0}\",", true); sb.AppendFormat("\"state\":\"{0}\"", strIsParent.Equals("true") ? "open" : "closed"); sb.Append(CartDataTableToTreeJson1(dt, pField, pcv, idField, nameField, isParentField, isChooseParentNode, url, icon).TrimEnd(',')); sb.Append("},"); } if (sb.ToString().EndsWith(",")) { sb.Remove(sb.Length - 1, 1); } sb.Append("]"); return sb.ToString(); } #endregion SQL语句: <DataCommand Name="GetAsynTree" CommandType="Text" CommandDescrip="获取菜单信息,异步加载Tree"> <CommandText> <![CDATA[ --DECLARE @ParentID BIGINT --SET @ParentID = 0 DECLARE @IsLeafNode BIT SET @IsLeafNode = 0 SELECT m.ID, m.Name, m.[Url], m.Icon, m.[Level], m.[Index], m.IsEnabled,m.ParentID, m.SecondAncestorID,isnull(n.ChildNodesNumber,0) ChildNodesNumber,isnull(n.IsLeafNode,1) IsLeafNode FROM Module m LEFT JOIN ( SELECT ParentID ID,COUNT(ParentID) ChildNodesNumber, @IsLeafNode IsLeafNode FROM Module GROUP BY ParentID ) n ON m.ID=n.ID WHERE ParentID=@ParentID ]]> </CommandText> <Parameters> <!--<Parameter Name="@DomainAccount" Size="10" DbType="AnsiString" Direction="Input"/>--> <Parameter Name="@ParentID" DbType="Int64"/> </Parameters>