问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C# 树形结构列表 的问题

发布网友 发布时间:2022-05-13 21:19

我来回答

3个回答

热心网友 时间:2022-05-19 21:14

首先Tree应该是一个自定义类,
tree.GetCategorys(); 是返回创建这颗树的所有结点,具体怎么定义,怎么来,看用户自己是怎么定义的了

// 如果没有结点, 就没必要创建树了, 直接返回
if(ds == null || ds.Tables.Count <= 0 || ds.Tables[0].Rows.Count <= 0) return;

// 这是要创建的树, 清空相当于进行初始化
tv.Nodes.Clear(); ///清空树的所有节点

///获取根节点的所有数据 (ParentID='0'的为根结点, 刚才说了,所有结点都存放在ds.Tables[0]中)
DataRow[] rootRows = ds.Tables[0].Select("ParentID='0'");

//如果没有根结点, 就没必要继续了, 返回
if(rootRows.Length <= 0) return;

//创建根节点,并添加到TreeView控件中
TreeNode root = new TreeNode(); // 这是一个结点对象,此将作为根结点
// 根结点的显示文本为第一行的Name字段
root.Text = rootRows[0]["Name"].ToString();
// 根结点的value值为第一行的ID字段
root.Value = rootRows[0]["ID"].ToString();
// 选中这个结点的动作----展开子结点
root.SelectAction = TreeNodeSelectAction.Expand;
// 将此结点加到树的第一层次中---因为直接加到树中,才决定了它是根结点
// 其它的子结点不是直接加到树中, 而是加入根结点中的(此种方法使用了组合
// 模式, 不明白的话,建议看看这种模式的说明
tv.Nodes.Add(root);

//刚才说了, 子结点是加入到根结点的, 这样才能形成树,
//这个方法是创建子结点,所以参数中要传入根结点
private static void CreateSubNode(TreeNode parentNode,DataTable dt)
{
// 根结点为空,返回
if(parentNode == null || dt == null) return;

///获取当前节点的所有数据 , 根据根结点ID查询根结点下的子结点
DataRow[] rows = dt.Select("ParentID='" + parentNode.Value + "'","ShowOrder");

// 循环所有子结点, 一个一个加入到根结点
foreach(DataRow row in rows)
{
///创建当前节点 , 下面这些跟上面的相似, 不用再说明
TreeNode node = new TreeNode();
node.Text = row["Name"].ToString();
node.Value = row["ID"].ToString();
node.Expanded = false;
//将此子结点加入根结点
parentNode.ChildNodes.Add(node);

///递规创建当前节点(node)的子节点
// 此子结点有可能也有子结点, 所以也要为它添加子结点
// 此递归的结束条件是完成所有子结点的循环
CreateSubNode(node,dt);
}

}

热心网友 时间:2022-05-19 22:32

去掉所有的附加代码看

private static void CreateSubNode(TreeNode parentNode,DataTable dt)
{
foreach(DataRow row in rows) //结束条件控制
{
CreateSubNode(node,dt); //函数自己调用自己,这个是递归函数
}

}

实际上你只要知道递归函数是什么就可以了。递归函数就是在函数内部自己迭代调用自己的函数,很类似数学里面的数列通项公式,不过要使用递归函数要小心控制结束条件,一个不小心就是无限循环调用

热心网友 时间:2022-05-20 00:07

首先Tree应该是一个自定义类,
tree.GetCategorys();
是返回创建这颗树的所有结点,具体怎么定义,怎么来,看用户自己是怎么定义的了
//
如果没有结点,
就没必要创建树了,
直接返回
if(ds
==
null
||
ds.Tables.Count
<=
0
||
ds.Tables[0].Rows.Count
<=
0)
return;
//
这是要创建的树,
清空相当于进行初始化
tv.Nodes.Clear();
///清空树的所有节点
///获取根节点的所有数据
(ParentID='0'的为根结点,
刚才说了,所有结点都存放在ds.Tables[0]中)
DataRow[]
rootRows
=
ds.Tables[0].Select("ParentID='0'");
//如果没有根结点,
就没必要继续了,
返回
if(rootRows.Length
<=
0)
return;
//创建根节点,并添加到TreeView控件中
TreeNode
root
=
new
TreeNode();
//
这是一个结点对象,此将作为根结点
//
根结点的显示文本为第一行的Name字段
root.Text
=
rootRows[0]["Name"].ToString();
//
根结点的value值为第一行的ID字段
root.Value
=
rootRows[0]["ID"].ToString();
//
选中这个结点的动作----展开子结点
root.SelectAction
=
TreeNodeSelectAction.Expand;
//
将此结点加到树的第一层次中---因为直接加到树中,才决定了它是根结点
//
其它的子结点不是直接加到树中,
而是加入根结点中的(此种方法使用了组合
//
模式,
不明白的话,建议看看这种模式的说明
tv.Nodes.Add(root);
//刚才说了,
子结点是加入到根结点的,
这样才能形成树,
//这个方法是创建子结点,所以参数中要传入根结点
private
static
void
CreateSubNode(TreeNode
parentNode,DataTable
dt)
{
//
根结点为空,返回
if(parentNode
==
null
||
dt
==
null)
return;
///获取当前节点的所有数据
,
根据根结点ID查询根结点下的子结点
DataRow[]
rows
=
dt.Select("ParentID='"
+
parentNode.Value
+
"'","ShowOrder");
//
循环所有子结点,
一个一个加入到根结点
foreach(DataRow
row
in
rows)
{
///创建当前节点
,
下面这些跟上面的相似,
不用再说明
TreeNode
node
=
new
TreeNode();
node.Text
=
row["Name"].ToString();
node.Value
=
row["ID"].ToString();
node.Expanded
=
false;
//将此子结点加入根结点
parentNode.ChildNodes.Add(node);
///递规创建当前节点(node)的子节点
//
此子结点有可能也有子结点,
所以也要为它添加子结点
//
此递归的结束条件是完成所有子结点的循环
CreateSubNode(node,dt);
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
鞋底是空心格子怎么办 鞋里有格子硌脚怎么办 买的鞋子里面是空心格子底硌脚怎么办 鞋子底是空心格子的怎样办 浅谈NY5196—2002有机茶 有机食品茶叶标准 茶叶的储藏运销:茶叶贮藏期的化学变化 东方美人茶要怎么储存?东方美人茶储存方法 乌龙茶贮运方法 有机乌龙茶是什么贮藏与运输的? VB的树状控件怎们弄 2021继续教育视频打不开 网络教育视频为什么打不开? 网络教育视频打不开 节庆活动的功能 现在做网页用什么主题好呢 做什么样的网页主题 我要做一个网页,可是想不到用什么主题 关于做网页的主题 做网页 什么主题好?急~ 煤气灶 台面 能贴纸吗? 想买灶台上的贴纸不知道尺寸要怎么办? 描写湖水和瀑布的句子 唐朝闻名全国的丝织品是什么? 描写瀑布的诗句或句子 关于 歌舞的 诗句 诗句中形容银河的词语 形容瀑布的诗句、好词好句有哪些? 描写泉瀑的好词好句好段 外地户口提取公积金 C#中 树形控件与dataGridview 有什么牛奶味的沐浴露?持久超香 我问你一下,沐浴露是力士香味好还是牛奶香味好,我是宠物店专用。 沐浴露的香味能最多能持续多久? 想知道手表时间是什么? 行车记录仪有卡吗 英国公司注册成功后得到的文件有哪些? ARv4个行车记录仪要记录卡吗?储存卡是领外的,还是车身自带就有?_百度问一问 澳大利亚公司注册完所得的文件有哪些? 带导航的行车记录仪需要流量卡吗 美国公司注册完的文件有哪些? 请问佳能SX 30 IS的外置闪光灯盖子怎么打开? 我的佳能IXUX310HS相机在拍照时,有时闪光灯亮了但拍不上照片!请高手速回! 我的那个佳能数码相机开闪光灯的时候就照了不 而且橘*的那个小灯还闪个不停 怎么回事? 佳能原产闪光灯如何设置自动和相机同步 Windows找不到文件?求大神解答! 卸载游戏,显示Windows找不到文件怎么办? Windows 找不文件,删除不了,卸载也不了 Windows 找不到文件 &#39;&#92;Plugins&#92;Creator&#92;FoxitProxyServer_Socket_PH.exe&#39;,请确定? qq特别关心 将对方设置为特别关心好友后 对方能看到么