アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも参考にさせて頂いてます。

早速ですが、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
と出力させたいのですが、どうしたらよいか見当もつきません。
いろいろ調べて再帰呼び出しで出来るんじゃないかと思うのですが、
再帰処理にに詳しくない為、先に進むことが出来ません。

どうしたら実現できるか、力をお貸しください。
宜しくお願い致します。

A 回答 (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/ind …

また、ASP.NET には 以下のカテがあり、そちらの方がご回答いただけると思いますので、カテを変えてご質問されることをお勧めいたします。

プログラミング > Microsoft ASP
http://oshiete1.goo.ne.jp/c249.html

お役に立てずすみません。
    • good
    • 0
この回答へのお礼

ご親切にありがとうございます。

カテを変えて質問してみます。

お礼日時:2007/04/26 13:01

# 開発の環境も書きましょう ...


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

といった具合です ...
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

早速試してみたいと思います。

お礼日時:2007/04/26 13:02

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' のメンバではありません。

何か設定しないといけないのでしょうか?
重ねてお願い致します。

補足日時:2007/04/23 18:06
    • good
    • 0

すみません。

補足をお願いします。

開発環境は何をお使いでしょうか?

VB.NET なら、お手伝いできるかも知れません。
(再帰を使った方法ではありませんが。。。)
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!