• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:TreeViewに重複する値をセット)

TreeViewに重複する値をセット

このQ&Aのポイント
  • TreeViewにデータテーブルの値をセットして表示しています。セットする値に重複する値がある場合、ツリーの構造が崩れてしまいます。
  • ツリーの値に非表示のキーを持たせる等、何か対応法をご存知の方がいらっしゃいましたら教えて下さい。
  • VB2005Expressで開発しています。PGMは「処理内容:TreeViewにデータテーブルの値をセット」から「TreeView1.SelectedNode = Nothing」までです。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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 としてみてください

madamadahiyoko
質問者

お礼

教えていただいた「Node.Textとの比較でしか探していない」が原因 でした。上記を組み込んだところ解決しました! 本当にありがとうございました。

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

前者のような構造なら ノードを追加する際に 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)
回答No.2

階層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)
回答No.1

お示しのツリーが崩れてしまっているようです DataTableの内容を投稿なさった方がいいかもしれません どのデータを表示したくて、どのデータは非表示にしたいとかいった情報も書き込みましょう

madamadahiyoko
質問者

補足

回答いただきありがとうございます。 そもそも図が変ですね。すいません。(1)のようにしたいのですが、(2) のようになってしまいます。 (1) あ |-い | | |  -う お |-い | | | -え (2) あ |-い | | | -う | -え お 非表示とは上図の「い」という値にキーのようなものを持たせれば どこの「い」か判別できるかなと思ったので、それを非表示で値を 持たせることができるのかと思って質問させていただきました。 文章がわかりずらくて申し訳ありません。

関連するQ&A