2010-11-19 8 views
0

私は特定の情報を表示するツリービューを持っています。特定の情報にフラグを立てる必要がある場合、ノードは赤色で表示されます。ユーザーは、ボタンクリックイベントで、赤いノードに関連するすべての情報を表示するデータグリッドを表示できます。c#treeview datagridiew interaction

各データグリッドにはチェックボックスが付いています。このチェックボックスを使用すると、SQLデータベースフラグを更新するtreenodeのフラグを切り替えることができます。また、ノードの色(ビジュアルフラグ)を黒に戻すこともできます。私は再帰を使用してこれを行う方法を知っていますが、ツリービューはノードの100または1000を保持するように成長する可能性があり、効率が心配です。反復することなく、特定のノードと対話する他の方法はありますか?

ありがとうございました。

答えて

1

一般的に、ツリーがバイナリツリーやBSTのようなプロパティを表示する場合、時間を短縮できますが、ほとんどの場合、winformsツリービューのシナリオではそうではありません。

このように、実際のノードに到達するための方法はありませんが、ツリーを再帰的に繰り返す方法はありません。

しかし、非同期プログラミングを使用して、セカンダリスレッドで検索することができます。

+0

それはポイントです....私は別のスレッドでそれをやるでしょう。ありがとう。 –

1

代替案は、対応するTreeNodeへの参照であるforeachを格納することができます。あなたがTreeNode参照を知っている場合

  1. ここでは、2つのオプションがあります。それは超簡単。すべて終わった。

  2. は、私はあなたがこの場合、あなたはノード「フルパス」にStringの参照を保存することができます... GridからTreeNodeの参照を知らないことを推測します。たとえば、次のようになります。/A/B/C/D

ノードのフルパスを知っている場合、効率的にツリーを検索できます。

この代替方法を使用すると、ノードを検索する効率は向上しますが、メモリ消費量は高くなります。あなたがそれを実装するならば、あなたの記憶がどのように成長するかを監視してください。特に、ノードに非常に長い名前がある場合は注意してください。

希望します。

+0

ありがとうございます。私は今、非同期の再帰オプションを試し、テレビが成長するにつれてどのように拡大するかを監視すると思います。あなたのものは良い解決策ですが、私の最初の選択肢がひどく悪い場合、私はこれに戻ってくるかもしれません。再度、感謝します。 –