使用数据表填充 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);
}

谢谢

使用数据表填充 C# 树视图

以下内容将起作用,但不能很好地扩展到大型数据集,因为它会同时搜索整个数据集和树以找到正确的父级。 它使用 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());
}

绝对可以使用优化和错误检查,但可以让您在小数据集上到达那里。