2010-03-03 4 views
4

어떻게 다음과 같은 계층 적 데이터를 나타낼 수 있습니까? 가능한 경우 어떤 컨트롤을 사용하면 도움이 될 것입니다.계층 적 데이터 표현 .net winforms

-node 
-----node1 - -data--data --data 
-------------node111 -- data -- data 
-------------node112 -- data -- data 
-------------node113 -- data -- data 
-----node2 - -data--data --data 
-------------node1121 -- data -- data 
-----node3 - -data--data --data 

그리고 가능하면 대부분의 셀에 여러 아이콘을 넣어야합니다.

이 튜토리얼 Link을 발견했습니다. 누군가 저에게 더 많은 정보를 지원할 수 있습니까?

가능하면 어떻게 할 수 있습니까?

고마워요.

+0

핵심 질문은 다음과 같습니다. 코드에서 "순수 데이터 구조"를 정의하는 대답을 찾고 있습니까? 기존 WinForms 컨트롤과 독립적으로 또는 세 번째. 파티 제어. 또는 기존 또는 3 번째 질문을 사용하는 답변을 기꺼이 받아 들일 수 있습니까? 파티 제어? Lokey의 대답에 대한 내 의견을 참조하십시오. – BillW

답변

2

내장 된 Windows Forms 컨트롤은이 용도로 적합하지 않습니다. 실제로 찾고있는 것은 트리 그리드 하이브리드 컨트롤 (AKA 멀티 컬럼 트리보기 또는 TreeList)입니다.

DevExpress는 내가 사용하는 (무료가 아닌) XtraTreeList이며 아마도 사용자가 요구하는 것과 가장 근접한 것입니다. Telerik의 GridView은 그룹화 권한을 설정하면 계층 적 방식으로 그리드 데이터를 표시 할 수도 있습니다.

이러한 가격이 너무 가파르면 FlexibleTreeView을 시도 할 수 있습니다. 또는 무료로 뭔가가 필사적으로 필요한 경우이 CodeProject 페이지를 확인하십시오 : Advanced TreeView for .NET. lot 더 많은 기발하고 상업용 제품보다 사용하기가 어려울 것입니다.하지만 그 일을 할 것입니다.

데이터가 균일하고 기본적으로 계층의 모든 노드에 대해 동일한 데이터를 표시하려고한다고 가정합니다. 데이터가 이기종 (노드 또는 레벨의 유형에 따라 완전히 다른 열) 인 경우 실제로 사용하려는 것은 계층 적 GridView입니다. 위에 나열된 동일한 게시자로부터 얻을 수 있습니다. 나는 어떤 반은 자유로운 버전도 알지 못한다.

1

포함하도록 강제, 파생의 TreeNode 개체를 만들 TreeView 컨트롤을

+0

TreeView 컨트롤에서 각 노드에 여러 아이콘을 넣을 수 있습니까? gridcontol과 결합할까요? –

1

한 가지 방법이 될 수 사용하십시오 List<data> :

여기
// requires declaration of : using System.Windows.Forms; 

// sample data class 
public class data 
{ 
    public string Name; 
    public int ID; 
} 

public class XTreeNode : TreeNode 
{ 
    List<data> theData = new List<data>(); 

    public XTreeNode(string theNodeID) 
    { 
     this.Text = theNodeID; 
    } 

    public void addData(data newData) 
    { 
     theData.Add(newData); 
    } 
} 

가의 인스턴스를 구축 무엇을 (우아한되지 않음) 샘플입니다 위의 데이터 구조는 (A의 WinForm에)과 같습니다 당신이 양식에으로 TreeView1 '라는 이름의 트 리뷰,이 가정

XTreeNode currentNode; 
    data currentData; 

    for (int i = 0; i < 10; i++) 
    { 
     // create the node and add it to the 'treeView1 
     currentNode = new XTreeNode(i.ToString()); 
     treeView1.Nodes.Add(currentNode); 

     // add some data entries to the List<data> of the derived TreeNode 
     currentData = new data {Name = "one", ID = 100}; 
     currentNode.addData(currentData); 

     currentData = new data { Name = "two", ID = 200 }; 
     currentNode.addData(currentData); 

     currentData = new data { Name = "three", ID = 300 }; 
     currentNode.addData(currentData); 

     // sample of adding a child node 
     currentNode.Nodes.Add(new XTreeNode((i * 100).ToString())); 
    } 

의 질문에 대한 어떻게 요 각 노드와 연결된 List<data>을 시각적으로 표시합니다. 일반적인 방법은 TreeView를 ListView와 결합하고 위치와 항목 높이를 동기화하는 것입니다. List<data>을 해당 TreeNode와 동일한 "행"에 표시하십시오.

물론 컨트롤과 완전히 독립적 인 노드 및 NodeCollection 엔티티를 구현할 수 있습니다.이 예제는 .NET 컨트롤을 사용하는 데이터 케이스 및 프리젠 테이션 메커니즘으로 사용되는 혼합 사례를 보여줍니다.

지난 수년간 유지 관리되고 업데이트되고 확장 된 TreePro/ListView 조합의 훌륭한 예가 있습니다 : Phillip Piper 's : "A Much Easier to Use ListView", 처음 게시 된 2006 년, 최종 업데이트 : 2009 년 10 월 : 기능이 풍부하여 if 우호적으로, imho, 상용 구성 요소와 비교.