- ベストアンサー
TreeViewに重複する値をセット
- TreeViewにデータテーブルの値をセットして表示しています。セットする値に重複する値がある場合、ツリーの構造が崩れてしまいます。
- ツリーの値に非表示のキーを持たせる等、何か対応法をご存知の方がいらっしゃいましたら教えて下さい。
- VB2005Expressで開発しています。PGMは「処理内容:TreeViewにデータテーブルの値をセット」から「TreeView1.SelectedNode = Nothing」までです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
fncSerchNodeで探しているノードが Node.Textとの比較でしか探していないのが原因でしょう 探すノードまでフルパスを検索してやれば希望通りになると思います 呼び出し側で 『階層5』を追加するための『階層4』ノードの検索に fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3 & "\" & strMenuName4) と 階層1から階層4までを "\"でつないだ物をキーに探します 階層3を探すなら fncSerchNode(strMenuName1 & "\" & strMenuName2 & "\" & strMenuName3) 階層2を探すなら fncSerchNode(strMenuName1 & "\" & strMenuName2 ) 階層1を探すなら fncSerchNode(strMenuName1 ) fncSerchNodeのIf Node.Text = strMenuName Then を If Node.FullPath = strMenuName Then としてみてください
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
前者のような構造なら ノードを追加する際に Add( row("階層1"), row("階層1") ) といった具合に Key、Textを指定して登録します ノードの検索に 階層1の場合は pNodes = TreeView1.Nodes.Find( row("階層1"), Flase ) として pNodes.Length = 0 なら新規ノード、0以外なら既存ノードと判定できます 階層2以下は pParent = pNodes(0) pChilds = pParent.Nodes.Find( row("階層2"), False ) として pChilds.Length=0なら新規のノードなどで追加 0以外なら既存のノードなので pParntにpChilds(0)を代入 pParent = pNodes(0) m = dTbl.columns.IndexOf("階層2") for n = m to dTbl.Columns.Count - m + 1 pChilds = pParent.Nodes.Find( row(n), False ) if pChilds.Length = 0 then pParent.Nodes.Add( row(n), row(n) ) else ' 検索する親を付け替える pParent = pChild(0) end if next といった具合です
- redfox63
- ベストアンサー率71% (1325/1856)
階層1、階層2、階層3などの情報は 同一レコードにあるのでしょうか データテーブルに あ あ、い あ、い、う お お、い お、い、う といった構造でしょうか それとも あ、い、う お、い、え の2レコードなのでしょうか どうも前者のように思えますが ・・・ 後者なら dim row as dataRow dim pNode as TreeNode dim n,m as integer m = dTbl.Columns.IndexOf("階層2") for each row in dTbl.rows if row("階層1")<>"" then pNode = treeView1.Nodes.add( row("階層1") ) for n = m to row.ItemArray.Length - m + 1 pNode = pNode.Nodes.Add( row( n ) ) next end if Next
- redfox63
- ベストアンサー率71% (1325/1856)
お示しのツリーが崩れてしまっているようです DataTableの内容を投稿なさった方がいいかもしれません どのデータを表示したくて、どのデータは非表示にしたいとかいった情報も書き込みましょう
補足
回答いただきありがとうございます。 そもそも図が変ですね。すいません。(1)のようにしたいのですが、(2) のようになってしまいます。 (1) あ |-い | | | -う お |-い | | | -え (2) あ |-い | | | -う | -え お 非表示とは上図の「い」という値にキーのようなものを持たせれば どこの「い」か判別できるかなと思ったので、それを非表示で値を 持たせることができるのかと思って質問させていただきました。 文章がわかりずらくて申し訳ありません。
お礼
教えていただいた「Node.Textとの比較でしか探していない」が原因 でした。上記を組み込んだところ解決しました! 本当にありがとうございました。