2009-09-15 2 views
3

IRC 클라이언트 용 서버/네트워크 설정 시스템을 구축하려고합니다. 네트워크와 서버의 관계로 인해 SQLite를 사용하여 모든 것을 저장했습니다.TreeView에 "바인딩"하시겠습니까?

내 첫 번째 단계는 예상대로 설정 대화 상자를 만드는 것입니다. 네트워크와 서버를 보유하는 TreeView, 그리고 설정을 편집 할 수있는 공간이 있습니다.

필자는 ADO.NET에 대해 약간의 경험이 있지만 기본적인 선택 및 업데이트 만하고 관계형 것은 아닙니다. 그래서 내 문제는 TreeNode 행을 연결하는 방법을 알아내는 것입니다. 나는 이미 서버와 네트워크를위한 사용자 정의 TreeNode 객체를 가지고 있으며, 수동으로 입력 한 일부 데이터와 잘 작동한다.

그래서 저는 "바인딩"할 필요가 없다고 생각합니다. 데이터를 TreeView에로드하고 설정을 쉽게 업데이트 할 수 있어야합니다.

답변

3

우리 프로젝트에서 TreeNode의 Tag 속성을 사용하여 행을 TreeNode에 연결하고 바인딩없이 수동으로 TreeView에 데이터를로드합니다.

3

Treeview를 채울 때 주요 문제는 모든 노드를 완전히로드하는지 또는 각 노드가 확장 될 때 일종의 지연로드 방식을 구현하는지 여부입니다.

전체 트리를 채우는 것은 500 개 미만의 노드가있는 경우에만 허용되며 노드 수가 증가하지 않습니다. 그렇지 않으면 게으른로드 방식이 가장 좋습니다.

이 작업을 수행하는 가장 간단한 방법은 노드의 하위 항목을 BeforeExpand 이벤트로 채우는 것입니다. 그러나 실제로 노드를 자식을 추가 할 때까지는 TreeView에 노드가 자식이 있음을 나타내는 +/-가 표시되지 않습니다. 따라서 부모 노드를 채우는 동안 논리적 항목 (데이터 행)에 하위 항목이 있는지 확인하고 하위 항목이있는 경우 더미 노드를 추가해야합니다.

TreeNode에서 사용자 정의 클래스를 상속받은 것이 더미 노드를 정의하는 가장 쉬운 방법 중 하나임을 발견했습니다. 그런 다음 Is 연산자를 사용하여 BeforeExpand()에서이를 확인할 수 있습니다.

그런 다음 사용자가 상위 노드를 확장 할 때 BeforeExpand 이벤트에서 더미 노드가 있는지 확인한 다음 더미 노드가 있으면 삭제하고 실제 노드를 채 웁니다. 각 노드에 대해 하위 노드를 확인하고 필요한 경우 태그 속성과 더미 노드를 채 웁니다.

각 노드의 Tag 속성을 의미있는 개체/데이터로 설정합니다. 그러면 필요할 때 쉽게 하위 노드를 채울 수 있습니다. 객체 유형이 아니라는 점을 알아 두십시오. 필요할 때 실제 데이터 유형으로 정확하게 변환해야합니다.

+0

"게으름로드"는 고려하지 않았습니다. 넣어 주셔서 감사합니다. Tag 속성에 대해서는 이미 사용자 지정 TreeNode 개체가 있으므로 필요하지 않습니다. 그런 식으로 클릭 한 내용과 양식의 다른쪽에 표시 할 텍스트 상자를 쉽게 말할 수 있습니다. DB 측에서는 사용자가 제안한대로 Tag 속성을 무엇으로 설정할 지 아직 확실하지 않습니다. –

관련 문제