C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

TreeViewを再帰的に作成したい。


(過去ログ 3 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■3188 / inTopicNo.1)  TreeViewを再帰的に作成したい。
  
□投稿者/ 津田子 一等兵(27回)-(2006/04/20(Thu) 21:40:42)

分類:[C#] 


分類:[C#] 

いつもお世話になっております。

データベースにツリーノードの情報として
・ID(int型)
・名前
・親のID(int型:0のときはルート)
を格納し、ツリービューを構築していきたいと思っています。

@IT[[ASP.NET]データベースからツリー・メニューを作成するには?[2.0のみ、C#、VB]]
http://www.atmarkit.co.jp/fdotnet/dotnettips/427asptreefromdb1/asptreefromdb1.html

と同じことをWindows.Formでやりたいのですが、先に進めず悩んでいます。
今日1日試行錯誤していたのですが、「どのように"再帰"を利用して木構造を作成していくかがわからない」ことが躓きの原因みたいです。
これを実現するための再帰メソッドについて、どうぞご教示おねがいします。



0
引用返信 編集キー/
■3189 / inTopicNo.2)  Re[1]: TreeViewを再帰的に作成したい。
□投稿者/ 中博俊 神(374回)-(2006/04/20(Thu) 22:39:51)
中博俊 さんの Web サイト

分類:[C#] 

再帰(@id)
親のID=@idのデータ取得
子の続く限り
再帰(子のid)
子の続く限り終わり

こういうこと。
IDを拾って渡していきましょう。

0
引用返信 編集キー/
■3195 / inTopicNo.3)  Re[1]: TreeViewを再帰的に作成したい。
□投稿者/ 魔界の仮面弁士 曹長(91回)-(2006/04/21(Fri) 12:05:12)

分類:[C#] 

> 「どのように"再帰"を利用して木構造を作成していくかがわからない」

たとえば、最終的に表示させるデータが
 大元
 ├子1
 │├孫11
 │└孫12
 └子2
  ├孫21
  └孫22
のような形式だとしたら、それを――
 Oracle なら、START WITH / CONNECT BY
 SQL Server なら、再帰クエリ
――などを用いるなどして、
 id 親 名前
 ------------
 01 00 大元
 02 01 子1
 04 02 孫11
 07 02 孫12
 03 01 子2
 06 03 孫11
 05 03 孫22
のような、「ツリーでの見た目の表示順」になるように取り出せば、
C#側を再帰メソッドにする必要は無いかも知れません。


void Button1_Click(object sender, System.EventArgs e)
{
 //実際には、データベースから取得
 this.treeView1.Nodes.Clear();
 AppendNode(treeView1, 1, 0, "大元");
 AppendNode(treeView1, 2, 1, "子1");
 AppendNode(treeView1, 4, 2, "孫11");
 AppendNode(treeView1, 7, 2, "孫12");
 AppendNode(treeView1, 3, 1, "子2");
 AppendNode(treeView1, 6, 3, "孫21");
 AppendNode(treeView1, 5, 3, "孫22");
}

void AppendNode(TreeView treeView, int id, int parentId, string name)
{
 // .NET 2.0用
 TreeNodeCollection nodes = treeView.Nodes;
 if(parentId != 0)
 {
  TreeNode[] parents = nodes.Find(parentId.ToString(), true);
  if(parents.Length != 0)
  {
   nodes = parents[0].Nodes;
  }
 }
 nodes.Add(id.ToString(), name);
}

0
引用返信 編集キー/
■3197 / inTopicNo.4)  Re[2]: TreeViewを再帰的に作成したい。
□投稿者/ 津田子 一等兵(29回)-(2006/04/21(Fri) 13:12:05)

分類:[C#] 

2006/04/21(Fri) 13:14:48 編集(投稿者)

中さん、魔界の仮面弁士さん、アドバイスをありがとうございます。

お二方の説明を元に作成したら思い通りの動作をするようになりました。

...私が最初に考えていたものよりもはるかにシンプルなものになりました。
難しく考えすぎていたのでしょうか(^^;)

本当にありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -