DOBON.NET DOBON.NETプログラミング掲示板過去ログ

TreeViewでのデータの追加の仕方

環境/言語:[VB.NET 2003]
分類:[.NET]

こんにちは。今回もお世話になります。あのね です。

現在、WinアプリでTreeViewを使用する開発を行っています。

・TBL_MAIN (プライマリキー:MainCD)
・TBL_SUB (プライマリキー:MainCD,SubCD)
の2つのテーブルから値を持ってきます。

このテーブルは、
『双方の MainCD で関連付けられる。』
『TBL_SUB のレコードは、TBL_MAIN に対して複数存在することがある。』
となっています。

今回は、質問・・というよりも素朴な疑問なのですが、
TreeViewにDataSetやDataTableを渡し、それを直接表示させることは
できないのでしょうか?

DataGrid等のように、[DataSource]プロパティに近いものがあれば、
何百回もループを回すことなく、思うものに近いTreeViewが表示できるのでは・・
と思ったのです。
(この処理が、いつもとても重たくて・・・)
TreeViewクラス・メンバ等で検索をかけてみたのですが、
それらしいものを見つけることができませんでした。

皆様は、1つ1つのノードをどのように追加していますか?

ご意見、お待ちしております。



/* リンク先の質問について(´・ω・`)
  長い間風邪で寝込んでいた為、ろくにお返事もできずすみませんでした。
  だいぶ前のものになってしまったので、トップの方にあげてしまうのも
  気が引けて・・・。
  
  この場を借りて、お礼申し上げます。
  ありがとうございました。

  http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=8891&rev=&no=0
*/
2005/02/24(Thu) 16:43:48 編集(投稿者)

こんにちは、じゃんぬねっと です。

■No9353に返信(あのねさんの記事)
> 今回は、質問・・というよりも素朴な疑問なのですが、
> TreeViewにDataSetやDataTableを渡し、それを直接表示させることは
> できないのでしょうか?

できないです、というより役割が逆ですよね。

> 何百回もループを回すことなく、思うものに近いTreeViewが表示できるのでは・・ と思ったのです。
> (この処理が、いつもとても重たくて・・・)

ひとつ思うのですが、重いのは TreeView のせいではなく「何百回」もループを回すことではないのでしょうか?
それが、中であろうと外であろうと、根本的な原因を解決しなければ意味がありません。
もし、自分のソースに原因があると思われるならば、ソースも提示してください。

> 皆様は、1つ1つのノードをどのように追加していますか?

恐らく、親子関係 (この場合はヘッダと明細と言うべきか) があるため、
TreeView を選択したかと思いますが、難しいところですね。
List などでしたら、可視領域だけを一旦読み込んだりすることで軽減できるのですが...

また List への追加に比べて Node への追加は、負荷がかかります。(微々たるものかな)
その辺りを改善されたいのならば、"初めて" 展開した時に子 Node を構築するという手もあります。
どこかに保持しておく仕組みが必要ですので、非常に面倒ですがやる価値はあります。

# 子の数によっては、"初めて" である必要はないかもしれません。
# その辺りは仕様次第のような気がします。

DOBON.NET | プログラミング道 | プログラミング掲示板