/// <summary> /// 树形列表控件(节点编号:父节点编号:节点名称) /// </summary> /// <param name="dataList">数据列表</param> /// <param name="controlName">控件名称</param> /// <param name="isTrunkSelect">主节点是否可以触发选中,true:可以,false:不可以</param> /// <param name="javaScriptCallback">调用的 JavaScript 函数名称,如果设置,选择节点时触发</param> /// <param name="activeClassName">节点选中时样式</param> /// <param name="styleEnum">树节点样式风格</param> /// <param name="maxLength">排序用长度,默认 2,如果树形编号超过 99,则设置为 3,超过 999,则设置为 4</param> /// <param name="style">菜单列表样式</param> /// <returns></returns> public static string CreateTreeMenu(List <ITreeData> dataList, string controlName, bool isTrunkSelect = true, string javaScriptCallback = null, string activeClassName = "active", string styleEnum = BootstrapTreeStyleEnum.SUPERMANAGER, int maxLength = 2, string style = "background-color:#ffffff;") { BootstrapTreeConfig bootstrapTreeConfig = TreeNodeConfigDict.ContainsKey(styleEnum) ? TreeNodeConfigDict[styleEnum] : null; string clientControlName = string.Format("{0}_menu_tree", controlName); StringBuilder stringBuilder = new StringBuilder(); if (dataList != null && dataList.Count > 0) { stringBuilder.Append(string.Format("<ul class=\"list-unstyled\" id=\"{0}\" style=\"cursor:pointer;{1}\">", clientControlName, style)); List <TreeNode <ITreeData> > treeNodeList = TreeHelper.ToTree <ITreeData>(dataList, maxLength); treeNodeList.Sort((x, y) => { return((int)(y.Data.TreeUniqueIdentity - x.Data.TreeUniqueIdentity)); }); foreach (TreeNode <ITreeData> treeNode in treeNodeList) { stringBuilder.Append(InitMenuTree(treeNode, controlName, style, bootstrapTreeConfig, isTrunkSelect)); } stringBuilder.Append("</ul>"); } stringBuilder.Append(@" <script type=""text/javascript""> var {controlName}_prev = null; $(function () { $('#{controlName} .menu_tree_item').click(function (event) { if({controlName}_prev != null){ {controlName}_prev.removeClass('{1}'); } {controlName}_prev = $(this); $(this).addClass('{1}'); var treeID = $(this).attr('data-tree-id'); {0} event.stopPropagation(); }); $('#{controlName} .menu_tree_i').click(function (event) { var treeID = $(this).attr('data-id'); var controlName = $(this).attr('data-name'); var treeNode = $('#' + controlName + '_' + treeID); if (treeNode.is(':hidden')) { treeNode.show(); $(this).removeClass('{defaultClassName}').addClass('{expandClassName}'); } else { treeNode.hide(); $(this).removeClass('{expandClassName}').addClass('{defaultClassName}'); } event.stopPropagation(); }); }); </script>".Replace("{0}", !string.IsNullOrEmpty(javaScriptCallback) ? string.Format("{0}(treeID, $(this));", javaScriptCallback) : "") .Replace("{1}", activeClassName) .Replace("{controlName}", clientControlName) .Replace("{defaultClassName}", bootstrapTreeConfig != null ? bootstrapTreeConfig.DefaultClassName : "") .Replace("{expandClassName}", bootstrapTreeConfig != null ? bootstrapTreeConfig.ExpandClassName : "")); return(stringBuilder.ToString()); }
/// <summary> /// 下拉树形列表控件(节点编号:父节点编号:节点名称) /// </summary> /// <param name="dataList">数据列表</param> /// <param name="controlName">控件名称</param> /// <param name="isTrunkSelect">主节点是否可以触发选中,true:可以,false:不可以</param> /// <param name="javaScriptCallback">调用的 JavaScript 函数名称,如果设置,选择节点时触发</param> /// <param name="controlWidth">控件宽</param> /// <param name="controlHeight">控件最大高度</param> /// <param name="styleEnum">树节点样式风格</param> /// <param name="maxLength">排序用长度,默认 2,如果树形编号超过 99,则设置为 3,超过 999,则设置为 4</param> /// <returns></returns> public static string CreateTreeSelect(List <ITreeData> dataList, string controlName, bool isTrunkSelect = true, string javaScriptCallback = null, int controlWidth = 300, int controlHeight = 200, string styleEnum = BootstrapTreeStyleEnum.SUPERMANAGER, int maxLength = 2) { BootstrapTreeConfig bootstrapTreeConfig = TreeNodeConfigDict.ContainsKey(styleEnum) ? TreeNodeConfigDict[styleEnum] : null; string clientControlName = string.Format("{0}_select_menu", controlName); string clientContainerName = string.Format("{0}_select_tree", controlName); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(string.Format("<div class=\"dropdown\" id=\"{0}\">", clientContainerName)); stringBuilder.Append(string.Format("<div class=\"form-inline\" id=\"{0}\" data-toggle=\"dropdown\" style=\"width:{1}px;\">", clientControlName, controlWidth)); stringBuilder.Append(string.Format("<input type=\"text\" id=\"{0}\" name=\"{0}\" class=\"form-control\" style=\"cursor:pointer;background-color:#FFFFFF;width:{1}px;\" readonly=\"readonly\" />", controlName, controlWidth)); stringBuilder.Append("<span class=\"caret\" style=\"margin-left:-20px;\"></span>"); stringBuilder.Append("</div>"); if (dataList != null && dataList.Count > 0) { stringBuilder.Append(string.Format("<div class=\"dropdown-menu\" aria-labelledby=\"{0}\" style=\"cursor:pointer;width:{1}px;max-height:{2}px;overflow-y:auto;padding:10px 15px;\">", clientControlName, controlWidth, controlHeight)); stringBuilder.Append("<ul class=\"list-unstyled\">"); List <TreeNode <ITreeData> > treeNodeList = TreeHelper.ToTree <ITreeData>(dataList, maxLength); treeNodeList.Sort((x, y) => { return((int)(y.Data.TreeUniqueIdentity - x.Data.TreeUniqueIdentity)); }); foreach (TreeNode <ITreeData> treeNode in treeNodeList) { stringBuilder.Append(InitSelectTree(treeNode, controlName, bootstrapTreeConfig, isTrunkSelect)); } stringBuilder.Append("</ul>"); stringBuilder.Append("</div>"); } stringBuilder.Append("</div>"); stringBuilder.Append(@" <script type=""text/javascript""> $(function () { $('#{controlName} .select_tree_item').click(function (event) { var controlName = $(this).attr('data-name'); $('#' + controlName).val($(this).attr('data-value')); $('#' + controlName + '_select_tree').removeClass('open'); var treeID = $(this).attr('data-tree-id'); {0} event.stopPropagation(); }); $('#{controlName} .select_tree_i').click(function (event) { var treeID = $(this).attr('data-id'); var controlName = $(this).attr('data-name'); var treeNode = $('#' + controlName + '_' + treeID); if (treeNode.is(':hidden')) { treeNode.show(); $(this).removeClass('{defaultClassName}').addClass('{expandClassName}'); } else { treeNode.hide(); $(this).removeClass('{expandClassName}').addClass('{defaultClassName}'); } event.stopPropagation(); }); }); </script>".Replace("{0}", !string.IsNullOrEmpty(javaScriptCallback) ? string.Format("{0}(treeID, $(this));", javaScriptCallback) : "") .Replace("{controlName}", clientContainerName) .Replace("{defaultClassName}", bootstrapTreeConfig != null ? bootstrapTreeConfig.DefaultClassName : "") .Replace("{expandClassName}", bootstrapTreeConfig != null ? bootstrapTreeConfig.ExpandClassName : "")); return(stringBuilder.ToString()); }
private static string InitMenuTree(TreeNode <ITreeData> treeNode, string controlName, string style, BootstrapTreeConfig bootstrapTreeConfig, bool isTrunkSelect) { string clientNodeID = string.Format("menu_tree_{0}", treeNode.Data.TreeID); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append(string.Format("<li class=\"{5}\" data-id=\"{0}\" data-value=\"{1}\" data-layer-id=\"{2}\" data-layer-name=\"{3}\" data-tree-id=\"{4}\" style=\"line-height:30px;\">", clientNodeID, string.Format("{0}:{1}:{2}", treeNode.Data.TreeID, treeNode.Data.TreeParentID, treeNode.Data.TreeName), treeNode.LayerID, treeNode.LayerName, treeNode.Data.TreeID, isTrunkSelect ? "menu_tree_item" : (treeNode != null && treeNode.NodeList.Count > 0 ? "" : "menu_tree_item"))); stringBuilder.Append(string.Format("<div style=\"padding-left:{0}px;\">", (treeNode.LayerIndex - 1) * (bootstrapTreeConfig != null ? bootstrapTreeConfig.Offset : 0))); if (treeNode != null && treeNode.NodeList.Count > 0) { treeNode.NodeList.Sort((x, y) => { return((int)(y.Data.TreeUniqueIdentity - x.Data.TreeUniqueIdentity)); }); // 树形图标会根据情况不同而有所调整 stringBuilder.Append(string.Format("<i class=\"{3} menu_tree_i\" data-id=\"{0}\" data-name=\"{1}\" style=\"font-size:12px;margin-right:10px;\"></i>{2}</div>", clientNodeID, controlName, treeNode.Data.TreeName, bootstrapTreeConfig != null ? bootstrapTreeConfig.DefaultFullClassName : "")); stringBuilder.Append(string.Format("<ul id=\"{0}_{1}\" class=\"list-unstyled\" style=\"display:none;{2}\">", controlName, clientNodeID, style)); foreach (TreeNode <ITreeData> treeClildNode in treeNode.NodeList) { stringBuilder.Append(InitMenuTree(treeClildNode, controlName, style, bootstrapTreeConfig, isTrunkSelect)); } stringBuilder.Append("</ul>"); } else { stringBuilder.Append(string.Format("{0}</div>", treeNode.Data.TreeName)); } stringBuilder.Append("</li>"); return(stringBuilder.ToString()); }