三种方式实现递归树加载

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();
        }

}

时间: 2024-10-13 08:10:18

三种方式实现递归树加载的相关文章

Android实战简易教程-第四十九枪(两种方式实现网络图片异步加载)

加载图片属于比较耗时的工作,我们需要异步进行加载,异步加载有两种方式:1.通过AsyncTask类进行:2.通过Handler来实现,下面我们就来看一下如何通过这两种方式实现网络图片的异步加载. 一.AsyncTask方式 1.main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.co

转 Velocity中加载vm文件的三种方式

Velocity中加载vm文件的三种方式 velocitypropertiespath Velocity中加载vm文件的三种方式:   方式一:加载classpath目录下的vm文件 Properties p = new Properties(); p.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); Ve

Android实现全屏的三种方式

一.通过代码 1 requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题栏 2 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 3 WindowManager.LayoutParams.FLAG_FULLSCREEN);// 隐藏状态栏 注意:必须在setContentView之前执行,否则会报错. 另外这种全屏显示方式的缺点是,会有隐藏标题栏和隐藏状态栏的动画过

加载gif动态图的三种方式

准备:本地图片资源,GifView GifView代码: /** * 调用结束就开始播放动画,如果需要用户指定何时播放的话,只需要把timer的开始放到合适的位置.通过对CFDictonaryRaf 也就是gifProperties的改变,我们还可以控制动画是否循环播放以及循环多少次停止. 通过对index的改变也可以控制动画从某帧开始播放.同理,同时改变index和count的话,也可以控制从某帧到某帧的播放. 注意:- (void)stopGif;之后才可以退出这个类.否则timer不会关闭

ios网络学习------4 UIWebView的加载本地数据的三种方式

UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIME的标识符等放入传送的数据中告诉浏览器使用那种插件读取相关文件. uiwebview加载各种本地文件(通过loadData方法): - (void)viewDidLoad { [super viewDidLoad]; [self setupUI]; NSString *path = [[NSBund

JavaScript判断图片是否加载完成的三种方式

一.load事件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!DOCTYPE HTML> <html> <head>     <meta charset="utf-8">     <title>img - load event</title> </head> <body>     <img id="img1" src=&qu

三种方式解决你的js加载乱码

第一种方式——编码统一 我们以前觉得出现乱码的原因是因为编码不统一,就是因为我们设置编码统一之后,就解决了问题,所以,让html和js的编码统一,是最简单的一个乱码解决方式,原因是什么,是因为,如果你在加载js的时候,并没有声明js的编码格式,那么浏览器会默认的按照当前html的编码格式进行解析引入的js文件,如果你的js和本身页面编码不一样,并且js中引入了中文字符,那么肯定会出现乱码的.要知道,程序都是笨笨的. 第二种方式——在引入js的标签中加入charset属性 这样引入,那么这个xx.

JavaScript判断图片是否加载完成的三种方式---转

JavaScript判断图片是否加载完成的三种方式 有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <!DOCTYPE HTML> <html> <head>     <meta charset="utf-8">     <title>img - load event</title>

Velocity中加载vm文件的三种方式

Velocity中加载vm文件的三种方式: a.  加载classpath目录下的vm文件 Properties p = new Properties(); // 加载classpath目录下的vm文件 // 这里是加载模板VM文件,比如:/META-INF/template/Web_B2CPayment.vm(请参考mas_spring_integration.xml) p.setProperty("file.resource.loader.class", "org.apa