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

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

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

Re[3]: TreeViewを簡単にに表示、読み取り


(過去ログ 47 を表示中)

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

■25525 / inTopicNo.1)  TreeViewを簡単にに表示、読み取り
  
□投稿者/ 泥グラマ (6回)-(2008/09/21(Sun) 17:28:00)

分類:[.NET 全般] 

TreeViewですが簡単に階層化した表示、読み取りをする裏技的なほう方はないのでしょうか…?

・データ内容:
ボールペン/黒
ボールペン/赤
ボールペン/青
ノート/A4/白
ノート/A4/青
ノート/B5/白
ノート/B5/青

・表示したい形:
ボールペン
 ├黒
 ├赤
 └青
ノート
 ├A4
 │ ├白
 │ └青
 └B5
   ├白
   └青

現在では上記のような内容ですと、
・表示するときはまず
「ボールペン」のノードを探して「黒」を追加…
「ノート」のノードを探して「A4」を探して「白」を追加…
・読み取るときは
1階層目のノード数を調べて、1階層目の1番目のノード数を調べて…
と、いうようにするしかないのでしょうか?
そう思うと、なにか気が遠くなってきまして…

もし、知っている方がおられましたらご助言お願いします。
引用返信 編集キー/
■25526 / inTopicNo.2)  Re[1]: TreeViewを簡単にに表示、読み取り
□投稿者/ ネタ好き (632回)-(2008/09/21(Sun) 17:51:43)
No25525 (泥グラマ さん) に返信
データベースとTreeViewのイベントを賢く使えば効率よく出来ます。
引用返信 編集キー/
■25529 / inTopicNo.3)  Re[2]: TreeViewを簡単にに表示、読み取り
□投稿者/ ロック (102回)-(2008/09/21(Sun) 21:30:13)
データの持ち方にもよりますが
やはりツリーは再帰関数で処理をすると楽です。

「再帰関数」とか「再帰処理」で検索すると色々出てくると思います。

引用返信 編集キー/
■25533 / inTopicNo.4)  Re[3]: TreeViewを簡単にに表示、読み取り
□投稿者/ やじゅ (651回)-(2008/09/21(Sun) 23:26:32)
やじゅ さんの Web サイト
今なら、XML形式でデータを作成してTreeView表示させるって感じでしょうか
http://hiros-dot.net/CS2005/Control/TreeView/TreeView11.htm
http://wawatete.ddo.jp/exec/program/cs/xml_xmltreeview

引用返信 編集キー/
■25539 / inTopicNo.5)  Re[1]: TreeViewを簡単にに表示、読み取り
□投稿者/ カドルドエグ (30回)-(2008/09/22(Mon) 09:44:08)
No25525 (泥グラマ さん) に返信、
> ・表示するときはまず
> 「ボールペン」のノードを探して「黒」を追加…
> 「ノート」のノードを探して「A4」を探して「白」を追加…
> ・読み取るときは
> 1階層目のノード数を調べて、1階層目の1番目のノード数を調べて…
> と、いうようにするしかないのでしょうか?
仕様にもよりますが、
以前私が同じような経験をしたときは、TreeViewに表示したいテーブルのキー項目を数字(数値ではない)にし、
左から○桁目まで親ノード、そこから△桁目までは子ノード、さらに□桁目までは孫ノード、
但し、子ノードか孫ノードの番号が0で埋められていたら親ノードのみまたは子ノードのみ…
としました。
これをテーブルの件数分だけキー項目を分析して処理する方法で表示させました。
そうすることで、具体的にいちいち「ボールペンだったら…、ノートだったら…」といった処理は必要なくなります。
ただ、こうして数字に意味を持たせる方法は基本的にあまり好ましくない方法らしいので、「こういった方法もありますよ」といった程度で…。
引用返信 編集キー/
■25551 / inTopicNo.6)  Re[2]: TreeViewを簡単にに表示、読み取り
□投稿者/ たくボン (30回)-(2008/09/22(Mon) 12:39:45)
No25539 (カドルドエグ さん) に返信
> ■No25525 (泥グラマ さん) に返信、
上記の例のように、ボールペン-色、ノート-サイズ-色が決まっているなら、TreeNodeクラスを継承してクラスを作成するのが良いかもしれませんね。
SizeNode,ColorNode,ProductNodeのように。

各継承したNodeには、Nodesオブジェクトが存在するので、各イベントで判断する場合は、senderオブジェクトで判定。
表示(というより子ノードの追加ですよね?)は、親ノードのコレクションクラスの仕事なのでそこに記述(ただし、LIST of Tを使用する場合は別に用意する必要あり。)
ノードの種類が増えて可読性が落ちる場合はデリゲートを用意して、個別のイベントを発火。

今はLIST of Tが使えるので、各Nodeクラスコレクションクラスを用意しなくてもよい時代になってるので実装は楽になった部分もありますが、固有の処理を実装したい場合はまだ個別のコレクションクラスを用意した方が可読性よくて個人的には好きです。

TreeViewと何かを連動させるなら、TreeViewも継承すると楽になります。
さらに抽象化して、エクスプローラーのような左右(もしくは上下)連動するコントロールを多用するならデザインパターンが使用できますね。
引用返信 編集キー/
■25603 / inTopicNo.7)  Re[3]: TreeViewを簡単にに表示、読み取り
□投稿者/ 泥グラマ (7回)-(2008/09/22(Mon) 21:10:43)
沢山の書き込みありがとうございました。
皆さんの書き込みろリンク先を閲覧しましたが
全体でやっぱり、ポンと簡単に分別、マージしてくれるような便利なコントロールではないとわかりました…
甘かったです(反省)

リンク先やご助言を使いながら、力任せに作っていこうと思います。
本当にありがとうございました。

(一応、作ったものについてはつたないプログラムではありますが、
 参考までに公開させていただきます)
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -