一、后台数据
1.定义ComboTree类
根据控件的属性来写
public partial class ComboTree { public string id { get; set; } public string text { get; set; } public string iconCls { get; set; } public string state { get; set; } public string parentid { get; set; } public string attributes { get; set; } public string children { get; set; } }
2.扩展ComboTree方法
public partial class ComboTree { public string GetTreeString(ListtreeList) { StringBuilder sb = new StringBuilder(); sb.Append("["); List parenTrees = treeList.Where(q => q.parentid == "0").ToList(); //赋权限每个角色都必须有父节点的权限,否则一个都不输出了 if (parenTrees.Count > 0) { foreach (var parentTree in parenTrees) { sb.Append("{\"id\":\"" + parentTree.id + "\",\"text\":\"" + parentTree.text + "\",\"iconCls\":\"" + parentTree.iconCls + "\",\"children\":["); sb.Append(GetChildString(treeList, parentTree.id)); } sb.Remove(sb.Length - 1, 1); sb.Append("]"); } else { sb.Append("]"); } return sb.ToString(); } public string GetComboTreeString(List comboTrees) { string sb = "["; comboTrees.ForEach(f => sb += "{\"id\":\"" + f.id + "\",\"text\":\"" + f.text + "\",\"iconCls\":\"" + f.iconCls + "\"},"); sb = sb.Trim(",".ToCharArray()); sb += "]"; return sb; } private string GetChildString(List treeList, string parentId) { StringBuilder sb = new StringBuilder(); List childrenTrees = treeList.Where(q => q.parentid == parentId).ToList(); if (childrenTrees.Count > 0) { foreach (var childrenTree in childrenTrees) { List childrens = treeList.Where(q => q.parentid == parentId).ToList();//childrenTreedt.Select(string.Format("parentid={0}", r_list[j]["id"].ToString()))); if (childrens.Count > 0) { sb.Append("{\"id\":\"" + childrenTree.id + "\",\"text\":\"" + childrenTree.text + "\",\"iconCls\":\"" + childrenTree.iconCls + "\",\"children\":["); sb.Append(GetChildString(treeList, childrenTree.id)); } else { sb.Append("{\"id\":\"" + childrenTree.id + "\",\"text\":\"" + childrenTree.text + "\",\"iconCls\":\"" + childrenTree.iconCls + "\",\"attributes\":{\"url\":\"" + childrenTree.attributes + "\"}},"); } } sb.Remove(sb.Length - 1, 1); sb.Append("]},"); } else //根节点下没有子节点 { sb.Append("]},"); //跟上面if条件之外的字符串拼上 } return sb.ToString(); } }
3.MVC调用
public ActionResult GetTree(){ ListcomboTrees = new List (); var list = new List ();//获取列表数据 list.ForEach(f => comboTrees.Add(new ComboTree() { id = f.Id, text = f.Name, parentid = f.ParentId })); string treeString = new ComboTree().GetTreeString(comboTrees); return Content(treeString);}
二、前端运用
HTML
脚本
function onLoadSuccess(node, data) { if (data && data.length>0) { $("#treeParentId").combotree('setValue', data[0].id); } }
function onSelect(record) {
console.log(record); var id = record.id; var text = record.text;}PS: 当远程数据加载成功时触发onLoadSuccess
ZeroArr为过滤数组,包含相同的id选项不能选中.
function onBeforeSelect(node) { var isZero = false; ZeroArr.forEach(function (value, index) { //console.log(node.id + "======" + ZeroArr[index].Id); if (node.id === ZeroArr[index].Id) { isZero = true; return false; } }); if (isZero) { $.msg_show("提示", "请选择下级节点"); return false; } }
PS: 在请求加载数据之前触发onBeforeLoad,返回 false 则取消加载动作
相关说明
combobox和combotree是combo的扩展,相关中文教程:
http://www.jeasyui.net/plugins/168.html combo
http://www.jeasyui.net/plugins/169.html comboBox
http://www.jeasyui.net/plugins/170.html comboTree