使用数据表填充 C# 树视图
本文关键字:视图 填充 数据表 | 更新日期: 2024-10-25 13:15:25
我有一个数据表,其中包含以下示例数据:
Name ID ParentID
A 1 0
B 2 1
C 3 2
D 4 1
E 5 4
我希望树视图以分层方式包含数据:
- 一个
- 乙
- C
- 乙
- D
- E
下面是我到目前为止的代码,但它似乎陷入了无限循环。 我以数据表的形式获取我的源代码,其中包含"名称"、"ID"和"父 ID"列
private void ListDirectory(TreeView treeView)
{
treeView.Nodes.Clear();
DataTable myDataTable = getFolders();
var stack = new Stack<TreeNode>();
var rootDirectory = myDataTable.Rows[0];
var node = new TreeNode(rootDirectory["Name"].ToString()) { Tag = rootDirectory };
stack.Push(node);
while (stack.Count > 0)
{
var currentNode = stack.Pop();
var directoryInfo = (DataRow)currentNode.Tag;
foreach (DataRow row in myDataTable.Rows)
{
var childDirectoryNode = new TreeNode(row["Name"].ToString()) { Tag = row };
currentNode.Nodes.Add(childDirectoryNode);
stack.Push(childDirectoryNode);
}
}
treeView.Nodes.Add(node);
}
谢谢
以下内容将起作用,但不能很好地扩展到大型数据集,因为它会同时搜索整个数据集和树以找到正确的父级。 它使用 ID 列作为每个 TreeNode 上的键 - 并要求您在数据集中的 ID 列上设置主键。
DataRow root = myDataTable.Rows[0];
treeView.Nodes.Add(root["ID"].ToString(), root["Name"].ToString());
for (int i = 1; i < table.Rows.Count; i++)
{
DataRow parentRow = myDataTable.Rows.Find(myDataTable.Rows[i]["ParentID"]);
TreeNode[] parent = treeView.Nodes.Find(parentRow["ID"].ToString(), true);
parent[0].Nodes.Add(myDataTable.Rows[i]["ID"].ToString(), myDataTable.Rows[i]["Name"].ToString());
}
绝对可以使用优化和错误检查,但可以让您在小数据集上到达那里。