zoukankan      html  css  js  c++  java
  • 三种方式实现递归树加载

    1、数据库实现:

    可以将此段数据库代码修改为存储过程实现:

    with temp
    as
    (SELECT * FROM EKP_Module WHERE mod_parentid = 2165
    UNION ALL
    SELECT m.* FROM EKP_Module AS m
    INNER JOIN temp AS child ON m.mod_parentid = child.mod_id
    )

    select * from temp

    2、Linq to Sql实现:

    public IEnumerable<APPModuleInfo> GetModulesByPID(int p_id)
    {
    IQueryable<APPModuleInfo> mods = from m in ekpEntities.EKP_MODULE
    where m.mod_parentid == p_id
    select new APPModuleInfo
    {
    ModId = m.mod_id,
    ModLink = m.ModLink,
    ModName = m.mod_name,
    ModParentId = m.mod_parentid
    };

    return mods.ToList().Concat(mods.ToList().SelectMany(m => GetModulesByPID(m.ModId)));
    }

    3、常规方式实现:

    public void AddTree(string ParentID, TreeNode pNode)
        {
            if (ds.Tables.Count > 0)
            {
                DataView dvTree = new DataView(ds.Tables[0]);
                //过滤ParentOrgID,得到当前的所有子节点   
                dvTree.RowFilter = "[IndexParentID]   =   '" + ParentID + "' and [StatusFlag]='1'";
                foreach (DataRowView Row in dvTree)
                {
                    TreeNode node = new TreeNode();
                    if (pNode == null)
                    {         //添加根节点   
                        node.Text = Row["IndexName"].ToString();
                        node.Value = Row["IndexID"].ToString();
                        TreeView1.Nodes.Add(node);
                        AddTree(Row["IndexID"].ToString(), node);         //再次递归   
                    }
                    else
                    {       //添加当前节点的子节点   
                        node.Text = Row["IndexName"].ToString();
                        node.Value = Row["IndexID"].ToString();
                        pNode.ChildNodes.Add(node);
                        AddTree(Row["IndexID"].ToString(), node);         //再次递归   
                    }
                }
                dvTree.Dispose();
                ds.Dispose();
            }

        }

  • 相关阅读:
    table变宽格式
    IE11兼容性设定
    Spring AOP注解失效的坑及JDK动态代理
    关于何时执行shiro AuthorizingRealm 里的 doGetAuthenticationInfo与doGetAuthorizationInfo
    后端接收json数据交互
    关于JavaDate数据返回到前端变数字的问题(并引申到前后端时间的传输)
    git 列出两个分支 或者两个提交版本之间不同的文件名字
    map put相同的key
    MyBatis 中如何调用 Java 的 enum (枚举) 字段
    @ResponseBody 和 @RequestBody 的作用
  • 原文地址:https://www.cnblogs.com/GGLoner/p/6830397.html
Copyright © 2011-2022 走看看