三种方式实现递归树加载
Posted GGLoner
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种方式实现递归树加载相关的知识,希望对你有一定的参考价值。
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();
}
}
以上是关于三种方式实现递归树加载的主要内容,如果未能解决你的问题,请参考以下文章
算法漫游指北(第十四篇):二叉树的深度优先遍历前序遍历(递归方式/非递归方式)中序遍历(递归方式/非递归方式)后序遍历(递归方式/非递归方式)
LeetCode114 二叉树展开为链表 ---二叉树题 三种解法 (递归) (迭代) (前驱节点)