2

データベースからテーブルを読み取るアプリケーションがあります。

SQLクエリを発行して、結果から収集した一意の文字列値に基づいて結果セットを取得します。case/ switchステートメントを使用して特定のオブジェクトを生成します(TreeNode BTWを継承します)。これらの作成されたオブジェクトは、後で使用するためにディクショナリオブジェクトにシャントされます。

これらのオブジェクトを生成する際、結果セットの値の一部を使用して、セッターを介してオブジェクトに値を入力します。

辞書にクエリを実行して特定のオブジェクトタイプを返し、それを使用してツリービューにデータを入力します。ただし、Dictionaryオブジェクトからツリービューに同じタイプの2つのオブジェクトを設定することはできません(実行時エラーが発生します。これは、現時点では、同じオブジェクトを参照することで回避されます)。したがって、私がしなければならないのは、memberwiseCloneを使用し、IClonableを実装してこれを回避することです。

私はこれを正しくやっていますか?もっと良い方法はありますか?これが私のプログラムをこの時点で本当に遅くしていると思うからです。少なくとも、少し不格好だと思います。私よりも多くのことを知っている人からのアドバイスはありがたいです。

4

3 に答える 3

2

外部辞書を使用している理由はありますか?データが照会されるときに、ツリーに直接データを入力します。

辞書が必要な場合は、ツリーノードの.Tagプロパティを設定して、辞書内のデータを指すようにすることができます。

于 2008-09-11T10:57:40.870 に答える
1

@ Bradに追加するには、必要に応じてツリーにデータを入力します。これは、ツリー ノードの展開イベントにフックすることを意味します。これは、ネットワーク共有を扱うときの Windows エクスプローラの機能に似ています。

TreeNodeツリー内の実際のツリー ノードごとに 1 つのオブジェクトが必要です。オブジェクトを再利用しようとしないでください。Tag プロパティを使用してそれらをデータに関連付けるか (これが推奨される方法です)、TreeNodeそれ自体をサブクラス化できます (これは Java メソッドですが、.NET ではあまり使用されません)。

(クローン作成メソッドの使用は、通常、(a) 何か間違ったことをしている、または (b) 可変オブジェクトを不変オブジェクトから分離するためにドメイン モデルを因数分解する必要があるというヒントです。)

于 2008-09-11T11:25:28.933 に答える
0

ユーザーが実際に見たいノードのみをロードする仮想ツリー ビューの使用を検討しましたか? www.infralution.com のコンポーネントでうまくいきました

于 2010-10-02T20:09:54.343 に答える