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
ID의 모든 값을 지불 노드에 다음 형식으로 저장하는 것이 더 낫습니까? 예를 들어:
Payment.Value = "1|2|1"
해결책
추가 데이터를 처리하는 가장 좋은 방법은 Treenode를 서브 클래스하는 것입니다. 유지하려는 공유 데이터가 포함 된 Basenode 클래스를 생성하고 특정 노드 유형에 대해 추가 물을 상속합니다.
서브 클래싱의 값은 다른 클래스와 마찬가지로 강력한 데이터 유형 및 복잡한 데이터 유형을 유지할 수 있다는 것입니다. 이는 파이프 분리기 등이있는 문자열로 배열을 해킹하지 않습니다.
노드가 제자리에 있으면 제안하는 것과 동일한 트리 워크를 허용합니다. 이제는 (예 :) Basenode.mydata (모든 하위 유형이 상속 될)에서 값을 가져 오는 것을 제외하고.
그래도이 작업을 수행하면 지켜봐야 할 한 가지 :이 노드가 얼마나 권위있는 지 이해해야합니다. 내 경우, 사용자가 트리를 탐색 할 때 데이터를 다시 채울 필요가 없는지 확인하기 위해 데이터베이스 캐시로 확인합니다.
다른 팁
만약 TreeNodes
의 TreeView
제어에는 a Tag
객체를 보유하는 속성, 원하는 속성을 포함하는 사용자 정의 객체를 각각과 연관시킬 수 있습니다. TreeNode
태그가 필요에 따라 액세스 할 수 있습니다.
예를 들어, .Net
4.5 현재, 그것은 다음과 같습니다.
myTreeNode.Tag = myObject;
어디에 myTreeNode
인스턴스입니다 TreeNode
그리고 myObject
당신이 정의한 사용자 정의 객체의 인스턴스는 당신이 TreeNode
당신의 TreeView
.
다음은 Treenode.tag 속성의 MSDN에 관한 기사입니다. MSDN -TREENODE.TAG 속성.
Godeke의 아이디어를 더욱 발전시키고 Treenode를 서브 클래징하는 대신 노드를 비즈니스 객체 컬렉션에 묶습니다. 로컬 데이터를 컬렉션 어린이의 속성에 저장하십시오. 컬렉션 로직은 필요한 데이터를 제공 할 수 있으며 프레젠테이션 계층에서 데이터와 논리를 분리하면 이점을 얻을 수 있습니다.