Пример #1
0
        /// <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());
        }
Пример #2
0
        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);
        }