/// <summary> /// 제네릭 타입의 리스트를 Easy UI 포멧의 트리구조로 변경 /// </summary> /// <param name="idFieldName">현재 노드의 값이 들어갈 필드 이름 : ex) "MAINCODE"</param> /// <param name="parentIdFieldName">부모 노드의 값이 들어갈 필드 이름 : ex) "SUBCODE"</param> /// <param name="textFieldName">현재 노드의 내용이 들어갈 필드 이름 ex) "CODENAME"</param> /// <param name="folderIconClass">Easyui Tree에서 상위 노드 아이콘 클래스 이름. ""인 경우 디폴트 이미지로 설정됨: ex) "icon-ok" </param> /// <param name="fileIconClass">Easyui Tree에서 말단 노드 아이콘 클래스 이름. ""인 경우 디폴트 이미지로 설정됨 : ex) "icon-reload" </param> /// <param name="bEncode"></param> /// <returns></returns> public static IEnumerable <EasyuiNode <T> > ToEasyuiTree <T>(this IEnumerable <T> aList, string aIdPropertyName, string aParentIdPropertyName, string aTextPropertyName, string aIconPropertyName, string aCheckedPropertyName, int aExpandLevel, string aTitle) { PropertyInfo lIdProp = typeof(T).GetProperty(aIdPropertyName ?? ""); PropertyInfo lParentidProp = typeof(T).GetProperty(aParentIdPropertyName ?? ""); PropertyInfo lTextProp = typeof(T).GetProperty(aTextPropertyName ?? ""); PropertyInfo lIconProp = typeof(T).GetProperty(aIconPropertyName ?? ""); PropertyInfo lCheckedProp = typeof(T).GetProperty(aCheckedPropertyName ?? ""); int lLevel = 1; List <T> lRootList = new List <T>(); foreach (var row in aList) { if (aList.Count(x => !x.Equals(row) && Convert.ToString(lParentidProp.GetValue(row, null)) == Convert.ToString(lIdProp.GetValue(x, null))) == 0) { lRootList.Add(row); } } List <EasyuiNode <T> > rtnList = new List <EasyuiNode <T> >(); if (aTitle != null) { EasyuiNode <T> lFirstNode = new EasyuiNode <T>(); lFirstNode.id = -1; lFirstNode.iconCls = "icon-hide"; lFirstNode.text = aTitle; rtnList.Add(lFirstNode); } foreach (T root in lRootList) { EasyuiNode <T> lRootNode = new EasyuiNode <T>(); lRootNode.id = Convert.ToString(lIdProp.GetValue(root, null)); lRootNode.parentId = Convert.ToString(lParentidProp.GetValue(root, null)); if (lIconProp != null) { lRootNode.iconCls = Convert.ToString(lIconProp.GetValue(root, null)); } if (lCheckedProp != null) { lRootNode.@checked = Convert.ToBoolean(lCheckedProp.GetValue(root, null)); } lRootNode.attributes = root; lRootNode.text = Convert.ToString(lTextProp.GetValue(root, null)); if (aExpandLevel > 0) { if (aExpandLevel >= lLevel) { lRootNode.state = "open"; } else { lRootNode.state = "closed"; } } rtnList.Add(aList.GetChild(lRootNode, lIdProp, lParentidProp, lTextProp, lIconProp, lCheckedProp, aExpandLevel, lLevel + 1)); } return(rtnList.ToArray()); }
private static EasyuiNode <T> GetChild <T>(this IEnumerable <T> list, EasyuiNode <T> node, PropertyInfo idProp, PropertyInfo parentIdProp, PropertyInfo textProp, PropertyInfo aIconProp, PropertyInfo aCheckedProp, int aExpandLevel, int aLevel) { if (aLevel > 10) { return(node); } IEnumerable <T> childList = list.Where(x => Convert.ToString(node.id) == Convert.ToString(parentIdProp.GetValue(x, null))).ToArray(); //현재 node id의 자식 node들을 가져온다 node.children = new List <EasyuiNode <T> >(); if (childList.Count() != 0) { //자식이 있는 경우 foreach (T data in childList) { EasyuiNode <T> _node = new EasyuiNode <T>(); _node.id = Convert.ToString(idProp.GetValue(data, null)); _node.parentId = Convert.ToString(parentIdProp.GetValue(data, null)); if (aIconProp != null) { _node.iconCls = Convert.ToString(aIconProp.GetValue(data, null)); } if (aCheckedProp != null) { _node.@checked = Convert.ToBoolean(aCheckedProp.GetValue(data, null)); } _node.attributes = data; _node.text = Convert.ToString(textProp.GetValue(data, null)); if (aExpandLevel > 0) { if (aExpandLevel > aLevel) { _node.state = "open"; } else { _node.state = "closed"; } } node.children.Add(list.GetChild(_node, idProp, parentIdProp, textProp, aIconProp, aCheckedProp, aExpandLevel, aLevel + 1)); } } else { // 자식이 없는 경우 node.state = "open"; //node.iconCls = fileIconClass; } return(node); }