先上图,再看代码。组织结构界面
组织结构添加:
组织结构修改:
组织结构删除:
我在做这个页面的时候treegrid 的远程数据加载让我很头痛,从LigerUI官网提供的Demo来看,它是根据json数据格式中的children来判断是否在前面显示展开按钮,官网提供的数据格式如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 var TreeDeptData = { 2 Rows: [ 3 { 4 id: '01', name: "企划部", remark: "1989-01-12", 5 children: [ 6 { 7 id: '0101', name: "企划分部一", remark: "企划分部一" 8 }, 9 {10 id: '0102', name: "企划分部二", remark: "企划分部二", children:11 [12 { id: '010201', name: "企划分部二 A组", remark: "企划分部二 A组" },13 { id: '010202', name: "企划分部二 B组", remark: "企划分部二 B组" }14 ]15 },16 { id: '0103', name: "企划分部三", remark: "企划分部三" }17 ]18 },19 { id: '02', name: "研发部", remark: "研发部" },20 { id: '03', name: "产品部", remark: "产品部" }21 ]22 };
从数据格式可以看出,当这一项有子节点的时候,才有children属性,但我们后台绑定数据的时候,通常返回的是一个model,所以有无子节点的数据都会有children属性,而treegrid在展示的时候,它是根据children属性来判断的,即有children,就显示展开按钮,所以界面显示的时候就会有点不伦不类.但没关系,自从我们有了dynamic 后,很多问题都解决了:)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 [NonAction] 2 public ListGetOrgs(IEnumerable orgs) 3 { 4 var result = new List (); 5 6 foreach (var item in orgs) 7 { 8 var children = _orgRepository.GetOrgChildrenNodeByParentCode(item.orgcode).ToList(); 9 if (children == null || children.Count() == 0)10 {11 result.Add(new12 {13 name = item.name,14 orgcode = item.orgcode,15 parentCode = item.parentCode16 });17 }18 else19 {20 21 result.Add(new22 {23 name = item.name,24 orgcode = item.orgcode,25 parentCode = item.parentCode,26 children = GetOrgs(children)27 });28 }29 }30 return result;31 }
前端完整代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 @section headerScripts{ 2 8 167 }168 169 170 171199 200
后端完整代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 public class OrganizationController : Controller 2 { 3 // 4 // GET: /Organization/ 5 6 private IOrgRepository _orgRepository; 7 8 public OrganizationController(IOrgRepository orgRepository) 9 { 10 this._orgRepository = orgRepository; 11 } 12 13 public ActionResult Index() 14 { 15 return View(); 16 } 17 18 public JsonResult OrgDataSource() 19 { 20 var data = _orgRepository.GetOrgParentsNode().ToList(); 21 var result = GetOrgs(data); 22 return Json(new { Rows = result, Total = result.Count() }, JsonRequestBehavior.AllowGet); 23 } 24 25 [NonAction] 26 public ListGetOrgs(IEnumerable orgs) 27 { 28 var result = new List (); 29 30 foreach (var item in orgs) 31 { 32 var children = _orgRepository.GetOrgChildrenNodeByParentCode(item.orgcode).ToList(); 33 if (children == null || children.Count() == 0) 34 { 35 result.Add(new 36 { 37 name = item.name, 38 orgcode = item.orgcode, 39 parentCode = item.parentCode 40 }); 41 } 42 else 43 { 44 45 result.Add(new 46 { 47 name = item.name, 48 orgcode = item.orgcode, 49 parentCode = item.parentCode, 50 children = GetOrgs(children) 51 }); 52 } 53 } 54 return result; 55 } 56 57 public JsonResult ParentNode() 58 { 59 var data = _orgRepository.GetOrgAll().ToList(); 60 61 return Json(data, JsonRequestBehavior.AllowGet); 62 } 63 64 public JsonResult AddOrg(string parentNode, string orgName, string orgCode) 65 { 66 67 var check = _orgRepository.GetOrgBySpecifiedCondition(orgCode); 68 69 if (check.Count() > 1) 70 { 71 return Json(new { result = false, msg = "添加失败,已存在相同的组织结构名称或组织机构编码!" }, JsonRequestBehavior.AllowGet); 72 } 73 74 var org = new t_org() 75 { 76 parentCode = parentNode, 77 name = orgName, 78 orgcode = orgCode 79 }; 80 81 try 82 { 83 var result = _orgRepository.AddOrg(org); 84 if (result) 85 { 86 return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet); 87 } 88 else 89 { 90 return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet); 91 } 92 } 93 catch (Exception ex) 94 { 95 return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet); 96 } 97 } 98 99 public JsonResult ModifyOrg(string orgName, string orgCode) {100 101 var check = _orgRepository.GetOrgBySpecifiedCondition(orgCode);102 103 if (check.Count() > 1)104 {105 return Json(new { result = false, msg = "修改失败,已存在相同的组织结构名称或组织机构编码!" }, JsonRequestBehavior.AllowGet);106 }107 108 var org = new t_org()109 {110 name = orgName,111 orgcode = orgCode112 };113 114 try115 {116 var result = _orgRepository.ModifyOrg(org);117 if (result)118 {119 return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);120 }121 else122 {123 return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);124 }125 }126 catch (Exception ex)127 {128 return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);129 }130 }131 132 public JsonResult DeleteOrg(string orgCode) {133 134 var org = new t_org()135 {136 orgcode = orgCode137 };138 139 try140 {141 var result = _orgRepository.DeleteOrg(org);142 if (result)143 {144 return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);145 }146 else147 {148 return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);149 }150 }151 catch (Exception ex)152 {153 return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);154 }155 }156 }