【发布时间】:2017-11-28 15:54:52
【问题描述】:
我正在尝试从数据库查询中填充 C# 树视图。
数据库的结构如下:
-----------------------------------------------
| PARENT_NODE | CHILD_NODE | LEVEL | NAME |
-----------------------------------------------
| 1 | 2 | 1 | name1 |
-----------------------------------------------
| 1 | 4 | 1 | name2 |
-----------------------------------------------
| 2 | 6 | 1 | name4 |
-----------------------------------------------
| 2 | 3 | 2 | name3 |
-----------------------------------------------
| 3 | null | 3 | name5 |
-----------------------------------------------
注意数据库查询不能更改。
作为树视图的表示,它看起来像这样。
name1
|---- name3
| |---- name5
name2
|
|
name4
我试图寻找与我有类似问题的其他人。但是,这些示例很难理解,通常对我不起作用。要么是我实施错了,要么就是不适合我的情况。
我最近的尝试是在循环中创建一个循环来遍历孩子并尝试将它们与父母相关联。但它没有显示任何东西。
// Nodes
TreeNode rootNode = new TreeNode("root_NAME");
TreeNode parent = new TreeNode();
TreeNode child = new TreeNode();
foreach (DataRow dr in dt.Rows)
{
if (dr["LEVEL"].ToString() == "1")
{
parent = new TreeNode(dr["NAME"].ToString());
rootNode.Nodes.Add(parent);
//TreeView.traceTreeView.Nodes.Add(node);
}
else
{
// Search for where child_node == parent_node and add that node
List<TreeNode> childList = new List<TreeNode>();
foreach (DataRow cr in dt.Rows)
{
if (cr["PARENT_NODE"].ToString() == dr["CHILD_NODE"].ToString())
{
childList.Add(child = new TreeNode(cr["NAME"].ToString()));
}
}
TreeNode[] childArray = childList.ToArray();
TreeNode node = new TreeNode(dr["NAME"].ToString(), childArray);
parent.Nodes.Add(node);
}
}
有人能告诉/告诉我如何遍历表并关联父节点和子节点,然后将它们添加到树视图中吗?
【问题讨论】:
-
不是答案,但我认为查找
AVL trees可能会有所帮助。 -
NAME指的是哪个节点?父节点还是子节点?它似乎因您的样本数据而异。LEVEL也没有意义,因为name1和name2具有相同的级别,但您说它们应该嵌套。 -
我不认为 Forms Tree 是你认为的那样。根据您的表现,我实际上并不真正理解您要显示的内容。
-
@LucasTrzesniewski 每个节点都有自己的名称,包括子节点和父节点。 Name1 和 Name2 实际上是根节点的子节点,因此存在 level0。但是,查询中并未构建此级别。
-
@VinnieNovido 那么我不明白你的图表。我以为 name2 应该是 name1 的孩子,但如果你说他们都是 0 级的孩子,那为什么 name4 的绘制方式与 name2 相同?
标签: c# visual-studio tree treeview treenode