2017-03-01 8 views
1

私はいくつかのノード、子ノードを持つツリービューをエクスポートしようとしています。これまでの進捗状況は以下のコードです。TreeNode export to 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

ツリービューは、たとえば私がこのツリーを持っているようなものです。これはあなたの例から得られたものです。 動物 犬猫 魚 淡水 ローチ ブリーム 塩水 スケート SkateChild ソウル – FlaxoIce

答えて

0

あなたはInorder Tree Traversalをお探しですか?私が何か誤解していない限り。

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++の例ですが、それでもあなたを助けるはずです。

EDIT:トラバーサルの深さ(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 
    } 
} 

EDIT 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レベル」(またはルート)にいる場合は列1に、2列目と3列目についてはexctにします。 http://stackoverflow.com/questions/443695/traversing-a-tree-of-objects-in-c-sharp これは、再帰にどの程度深くネストされているかを把握するのに役立ちます。 – user3164339

+0

簡単な答えがあれば分かりますが、私はプログラミングが初めてです – FlaxoIce