문제

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 (모든 하위 유형이 상속 될)에서 값을 가져 오는 것을 제외하고.

그래도이 작업을 수행하면 지켜봐야 할 한 가지 :이 노드가 얼마나 권위있는 지 이해해야합니다. 내 경우, 사용자가 트리를 탐색 할 때 데이터를 다시 채울 필요가 없는지 확인하기 위해 데이터베이스 캐시로 확인합니다.

다른 팁

만약 TreeNodesTreeView 제어에는 a Tag 객체를 보유하는 속성, 원하는 속성을 포함하는 사용자 정의 객체를 각각과 연관시킬 수 있습니다. TreeNode태그가 필요에 따라 액세스 할 수 있습니다.

예를 들어, .Net 4.5 현재, 그것은 다음과 같습니다.

myTreeNode.Tag = myObject;

어디에 myTreeNode 인스턴스입니다 TreeNode 그리고 myObject 당신이 정의한 사용자 정의 객체의 인스턴스는 당신이 TreeNode 당신의 TreeView.

다음은 Treenode.tag 속성의 MSDN에 관한 기사입니다. MSDN -TREENODE.TAG 속성.

Godeke의 아이디어를 더욱 발전시키고 Treenode를 서브 클래징하는 대신 노드를 비즈니스 객체 컬렉션에 묶습니다. 로컬 데이터를 컬렉션 어린이의 속성에 저장하십시오. 컬렉션 로직은 필요한 데이터를 제공 할 수 있으며 프레젠테이션 계층에서 데이터와 논리를 분리하면 이점을 얻을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top