- ベストアンサー
TreeViewコントロールについて
いつも参考にさせて頂いてます。 早速ですが、DBの値をTreeViewを使用して表示したいと思っています。 DBには、 CD 機能1 機能2 機能3 CD1 A1 B1 C1 CD1 A1 B2 C2 CD1 A1 B2 C3 CD2 A2 B3 C4 見たいな感じでデータが登録されています。 これをTreeViewに、 CD1 LA1 LB1 | LC1 LB2 LC2 LC3 CD2 LA2 LB3 LC4 と出力させたいのですが、どうしたらよいか見当もつきません。 いろいろ調べて再帰呼び出しで出来るんじゃないかと思うのですが、 再帰処理にに詳しくない為、先に進むことが出来ません。 どうしたら実現できるか、力をお貸しください。 宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
No.2 です。 > 'System.Web.UI.WebControls.~~' すいません。TreeViewって、Windowsアプリの TreeView (System.Windows.Forms.TreeView) ではなかったのでしょうか?私すっかりWindowsアプリだとばっかり考えておりました。すみません。。。 上記のクラスをお使いということは、Web アプリ(ASP.NET?)でしょうか。であれば、私は門外漢なので、お答えできません(^^;。 ASP.NET はよく知らないのですが、取り急ぎ、ASP.NETでの TreeView 作成に参考になりそうなサイトだけ見つけたので書いておきます。以下のサイトから、「IE WebBrowserコントロール」の、「TreeView」に関する記述をご参照ください。 http://www.atmarkit.co.jp/fdotnet/dotnettips/index/index.html また、ASP.NET には 以下のカテがあり、そちらの方がご回答いただけると思いますので、カテを変えてご質問されることをお勧めいたします。 プログラミング > Microsoft ASP http://oshiete1.goo.ne.jp/c249.html お役に立てずすみません。
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
# 開発の環境も書きましょう ... VB6の場合 On Error Resum nextでトラップしながらノードを追加するのが簡単なようです 便宜的に 配列にデータがあるとします ... oData(3,3) に ご質問のデータが格納されているとします ' ルート部分 for n=0 to 3 on error resume next TreeView1.Nodes.Add ,, oData(n,0),oData(n,0) on Error goto 0 next ' 子ノードの追加 for n=1 to 3 for m=0 to 3 on error resume next TreeView1.Nodes.Add oData(n-1,m), tvwchild, odata(n, m), oData(n,m) on error goto 0 next next ' ツリーの展開 for each oNode in TreeView1.Nodes oNode.Expaneded = true next といった具合です ...
お礼
ご回答ありがとうございます。 早速試してみたいと思います。
No.1です。すいません。よくよく考えたら、ここはVisual Basic のカテでしたね(恥)。さっきのは無視してください。 基本は、ノードがなければ追加して、あれば既存のものを使用する、という単純なループ処理でいけました。 ノードのある・なしは、IndexOfKeyというメソッドで判定します。 Addメソッドは変数の種類によりいくつか使い分けられますが、今回は .Add(key, text) を使っています。(あとでKey検索するため。) 下の階層に行くときは、上の階層を nodes という変数に置き換えています。 サンプルコードを載せておきます。VB.NET 2005 で作っています。 Private Sub CreateTreeView() Dim db As String(,) = {{"CD1", "A1", "B1", "C1"}, _ {"CD1", "A1", "B2", "C2"}, _ {"CD1", "A1", "B2", "C3"}, _ {"CD2", "A2", "B3", "C4"} _ } Dim nodes As TreeNodeCollection = TreeView1.Nodes For I As Integer = 0 To db.GetUpperBound(0) nodes = TreeView1.Nodes For J As Integer = 0 To db.GetUpperBound(1) Dim index As Integer = nodes.IndexOfKey(db(I, J)) If index = -1 Then nodes = nodes.Add(db(I, J), db(I, J)).Nodes Else nodes = nodes.Item(index).Nodes End If Next Next End Sub 以上、ご参考までに。
補足
早速のご回答、ありがとうございます。 こちらの環境もVB.NET 2005 で作っていますが、 サンプルコードを試してみた所、下記3箇所でエラーになってしまいました。 >Dim index As Integer = nodes.IndexOfKey(db(I, J)) 'IndexOfKey'は 'System.Web.UI.WebControls.TreeNodeCollection' のメンバではありません。 >nodes = nodes.Add(db(I, J), db(I, J)).Nodes 型 'String' の値を 'System.Web.UI.WebControls.TreeNode' に変換できません。 >nodes = nodes.Item(index).Nodes 'Nodes' は 'System.Web.UI.WebControls.TreeNode' のメンバではありません。 何か設定しないといけないのでしょうか? 重ねてお願い致します。
すみません。補足をお願いします。 開発環境は何をお使いでしょうか? VB.NET なら、お手伝いできるかも知れません。 (再帰を使った方法ではありませんが。。。)
お礼
ご親切にありがとうございます。 カテを変えて質問してみます。