2017-03-01 68 views
1

我想导出一个treeview,其中有几个节点,要优秀的子节点。目前的进展是下面的代码。TreeNode导出为Excel

如何提取所有节点和子节点以分隔列?

string mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
using (StreamWriter sw = new StreamWriter(mydocpath + @"\MaterialList.csv")) 
foreach (TreeNode node in treeView1.Nodes) 
{ 
     sw.WriteLine(node); 
} 
+0

你能举一个简单的输入/输出情况的一个例子,(即给予一定的树,这将是从这个方法您的输出)?这有助于给你的问题一个更明确的答案。 – tjcertified

+0

从下面的Web图像中看到的树形图如下所示。但没有复选框https://www.codeproject.com/Articles/202435/Tri-State-Tree-View – FlaxoIce

+0

树视图看起来像Lets例如我有这棵树 - 从你的一个例子中得到这个。 动物 狗 猫 鱼 淡水 罗奇 鲂 咸水 滑板 SkateChild 灵魂 – FlaxoIce

回答

0

我相信你正在寻找中序遍历树?除非我误解了某些东西。

http://www.cplusplus.com/forum/beginner/131457/

void Tree:: Inorder(Node* Root) 
{ 
    if(Root != NULL) 
    { 
     Inorder(Root->Left()); 
     cout << Root->Key() << endl; 
     Inorder(Root->Right()); 

    } 
} 

这个小功能使用递归调用打印出他们似乎开始“根”的顺序树的所有节点。我认为,从这个出发点出发,你应该能够相当容易地弄清楚这一切。如果没有,请让我知道(或者如果这不是你要找的东西)。这是一个C++的例子,但它应该仍然帮助你。

编辑:跟踪穿越深度(Traversing a tree of objects in c#)的:

printRoot(Node node) 
{ 
    printNode(node, 0); 
} 

printNode(Node node, int level) 
{ 
    printTitle(node.title) 
    foreach (Node child in node.children) 
    { 
    printNode(child, level + 1); //<-- recursive 
    } 
} 

编辑2:既然你仍然不确定如何使用这个,我在外面写的代码。

public void InorderTraversal(TreeNode root){ 
    InorderTraversal(root, 0); 
} 

public void InorderTraversal(TreeNode root, int level){ 
    //this is where you write to excel. You can also use 'level' to decide if you insert in column 1, 2, or 3 just by using a simple if statement like this: 
    if(level == 0) 
    sw.WriteLine(node, level.ToString()); 

    foreach (TreeNode child in root.children){ //depending on how your tree is implemented this is probably either going to be root.children or root.next 
    InorderTraversal(child, level + 1); 
    } 
} 

要在代码中使用这样的:

void main(void){ 
    InorderTraversal(treeView1.Nodes); 
} 
+0

请参阅此图像。 http://imgh.us/TreeviewToExcel.png – FlaxoIce

+0

是的,我看到了,你需要修改我给你的代码来计算你在树中的深度。如果你处于“第一级”(或根部),那么你需要插入第1列,并在第2列和第3列中列出。 http://stackoverflow.com/questions/443695/traversing-a-tree-of-objects-in-c-sharp 这应该会帮助你跟踪你在递归中的嵌套程度。 – user3164339

+0

我会很感激,如果有一个简单的答案,我是新编程 – FlaxoIce