TreeViewコントロールのノードにデータを保存するための最良の方法は何ですか?
-
23-08-2019 - |
質問
TreeViewコントロールは、ユーザーに階層を提示するが、下記に示す階層で次のシナリオを想像するための良い方法です。
Building 1
-Tenant 1
- Payment 1
- Payment 2
Building 2
-Tenant 1
- Payment 1
-Tenant 2
- Payment 1
- Payment 2
ユーザーが支払いノードをクリックしたときに、データベースへの挿入を行うために必要な場所。基本的に挿入するために必要な変数はBuilding_Id、Tenant_Id、Payment_Idです。これらを組み立てるための一つの方法は、各ノードの親に歩くことです。
Building_Id = Payment.ParentNode.ParentNode.Id
これはBuilding_Id、Tenant_Id、Payment_Idの値を解析し、その後、次の形式で支払ノード上のIDの値のすべてを保存するために、より良いですか?たとえばます:
Payment.Value = "1|2|1"
解決
私は、追加のデータを処理するための最良の方法は、ツリーノードのサブクラスを作成することです見つけます。私は維持したい共有データが含まれているBaseNodeクラスを作成し、任意の特定のノードタイプのためのものから、さらに継承します。
サブクラスの値は、パイプセパレータなどとの文字列にハッキングの配列を回避する...ただ、他のクラスと同様に強力なデータ型と複合データ型を維持することができるということです。
あなたの場所であなたのノードを持っていたら、それは今あなたが(すべてのサブタイプが継承されます)(例えば)BaseNode.MyDataから値を引いている以外、あなたが提案する同じツリー散歩することができます。
一つのことは、あなたががこれを行う場合を監視するために:あなたは、これらのノードになりたいどのように権威理解する必要があります。私の場合は、ユーザーがツリーをナビゲートするとき、我々は、データを再投入する必要はありません確実にするためにデータベースキャッシュに確認してください。
他のヒント
TreeNodes
コントロールのTreeView
は、オブジェクトを保持しているTag
性質を持っている場合は、、あなたは、あなたが必要に応じてそれらにアクセスすることができ、各TreeNode
のタグが付けられたこれらの所望の特性を含むカスタムオブジェクトを関連付けることができます。
たとえば、4.5のよう.Net
で、それはこのようになります:
myTreeNode.Tag = myObject;
myTreeNode
はTreeNode
とmyObject
のインスタンスである場合は、あなたがあなたのTreeNode
のTreeView
に関連付けられているしたいデータが含まれている定義されたカスタムオブジェクトのインスタンスです。
ここでTreeNode.TagプロパティのMSDNの記事です:
あなたは、ビジネス・オブジェクト・コレクションにノードを結ぶ、さらに、代わりのTreeNodeをサブクラスのGodekeのアイデアを取って検討するかもしれない - コレクションの子のプロパティでローカルのデータを格納します。収集ロジックは、あなたが必要とプレゼンテーション層からのデータとロジックを分離することの利点を得るデータを与えることができるようになります。