【问题标题】:Converting TreeNode to DataTable Dynamically将 TreeNode 动态转换为 DataTable
【发布时间】:2011-11-30 07:25:30
【问题描述】:

有很多方法可以将数据表转换为树视图(树节点),例如this。但是有没有办法创建一个维护层次结构的数据表。例如。如果TreeNode 是这样的

A-A1
 -A2-A21
    -A22
B-B1
 -B2-B21
 -B3-B31
    -B32-B321
        -B322
    -B33
 -B4

在数据表中应该如下所示。然后我可以将它保存在数据库中,或者在datagrid 中向用户显示。

所有列都可以有string 值。

有什么办法可以让我将treenode 传递给一个函数,它会动态地创建这样的数据表。 treenode 结构每次都会改变,这就是为什么我不能硬编码它。假设我有一个这样的递归函数。

public void CreateData(TreeNode trn)
{

   foreach(TreeNode t in trn.Nodes)
   {
       CreateData(t);
   }

}

我在理解递归函数的代码流方面遇到困难。 任何建议表示赞赏。

谢谢。

【问题讨论】:

  • 你的意思是保存到DataTable还是DataBase?无论如何,这个数据表可能有什么结构。根据你的例子,这个数据表可能有一个列(类型字符串)或者这个表应该有多个(动态创建的)列(类型字符串)。请添加更多信息!
  • Hippo 通常在这些情况下,您有一个表,其中包含 ID、标题和 ParentID,并且每个非根节点都有指向表中其父节点记录的 parentID。我认为您应该这样做,而不是使用您在问题中定义的表格。还要考虑当您将树视图控件绑定到我提到的此类表结构时,它们能够以这种方式精确填充。
  • 编辑问题,看看。
  • 编辑后:您的出发点仍不清楚。你的数据来源是什么?您是否已经在某处存储了分层数据并且只想动态创建System.Data.DataTable?但是,“将其保存在数据库中”是什么意思?

标签: c# winforms datatable treenode


【解决方案1】:

这是一个伪代码,希望它能帮助你处理你的问题

private void getNodeList()
{
    //This will hold your node text
    List<string> nodeTextList = new List<string>();
    //loop through all teeview nodes
    foreach(TreeNode rootNode in treeView.Nodes)
    {
       //Add root node to list
       nodeTextList.Add(rootNode.Text);
       //Do recursive getter to get child nodes of root node
       getChildNodes(rootNode, nodeTextList);

    }
    //Do with nodeTextList what ever you want, for example add to datatable.
}

private void getChildNodes(TreeNode rootNode, List<string> nodeTextList)
{
   foreach(TreeNode childNode in rootNode.Nodes)
   {
       //Add child node text
       nodeTextList.Add(childNode.Text);      
       getChildNodes(childNode, nodeTextList);
   }
}

【讨论】:

  • 感谢伪代码,但NodeTextList 只是获取节点中存在的所有节点的名称。我没有办法维持孩子父母的关系。
  • 创建类来容纳孩子和父母,列出该类并填写它
【解决方案2】:

如果您不了解该功能或它应该如何工作,您可能需要阅读Depth-first search。这正是你在做什么 + 你应该添加代码来保存你现在所在的节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 2016-05-14
    • 2014-07-22
    相关资源
    最近更新 更多