2009-06-08 3 views
2

ASP.NET에서 hierarical 데이터를 어떻게 표시합니까? 다음과 같은 데이터 소스가 있습니다.ASP.NET을 사용하여 hierarical 데이터를 표시하려면 어떻게합니까?

class Tree 
{ 
    IEnumerable<Node> Nodes { get; set; } 
} 

class Node 
{ 
    string Description { get; set; } 
    decimal Amount { get; set; } 
    IEnumerable<Node> SubNodes { get; set; } 
} 

아래와 같이 div의 목록을 렌더링하고 싶습니다. 분기를 확장하거나 축소 할 때 애니메이션을 부드럽게 만들려면 div 태그가 필요합니다.

<ul class="foldable"> 
    <li> 
     <div class="line"> 
     <div class="description">...</div> 
     <div class="amount">...</div> 
     </div> 
     <div class="line"> 
     <div class="description">...</div> 
     <div class="amount">...</div> 
     </div> 
     <ul> 
     <li> 
      <div class="line"> 
       <div class="description">...</div> 
       <div class="amount">...</div> 
      </div> 
     </li> 
     </ul> 
    </li> 
</ul> 
  • 나는 ListView 요소를 사용하여이 구축했지만, 나는 재귀 적으로 호출하는 방법을 알아낼 수 없었다.
  • 또한 TreeView 클래스를 살펴 보았지만 테이블을 사용하여 렌더링되었으므로 드롭했습니다.
  • 웹 사이트의 모든 컨트롤에 대해 스위치 또는 스위치로 보이기 때문에이 스위치를 CSS Friendly Control Adaptors에서 포기했습니다.
  • BulledList으로 시도했지만 div를 렌더링하는 방법을 알 수 없습니다.

네 개의 똑같은 중첩 된 ListView 요소를 사용하게되었는데, 그 이유는 내 목록이 4 단계보다 절묘하다는 것입니다. 하지만이 솔루션은 내가보기에 더 나은 것을 찾기를 희망하고 있습니다. =)

+1

단순히 레이아웃 컨테이너로 div를로드하지 마세요. 콘텐츠의 의미와 일치하는 HTML 요소를 먼저 사용하고 그에 따라 CSS를 적용하십시오 (필요한 경우 display : block 사용). http : //daniiswara.net/2009/01/31/div-mania-is-not-semantic-xhtml/ - 절대적으로해야한다면 div 만 사용하십시오. –

+0

그래,이 레이아웃에는 많은 div가 있다는 것을 알고 있습니다. 그러나 모든 브라우저에서 애니메이션을 바로 가져와야했습니다. 그리고 CSS를 끄면이 솔루션은 중첩 목록으로 잘 변형됩니다. –

답변

3

리피터 컨트롤을 사용하여 목록을 순환하고 자식이있는 각 노드에 다른 리피터를 중첩 할 수 있습니다. 프로그래밍 방식으로 사용해야하기 때문에 약간의 노력이 필요하지만 미리 작성된 Repeater 컨트롤을 서버 컨트롤로 사용하면 훨씬 쉽습니다.

나는 리피터를 사용하기를 좋아하는데, 그 이유는 리피터를 사용하는 것이 시간이 걸리고 작업 할 때 매우 유연하기 때문입니다. 그건, 그리고 그들은 관계없는 HTML을 넣지 않습니다. :)

+0

좋은 지적! Visual Studio에서 마크 업 파일을 편집 할 때 포인트 앤 클릭 프로그래밍 기능을 실제로 사용하기 때문에 필자가 더 좋은 제안을 얻지 못하면 코드 숨김 파일로 코드를 이동합니다. –

+0

이 경우 가장 좋은 방법은 중첩 된 ListView를 사용하거나 함수를 수행 할 수있는 사용자 정의 컨트롤을 개발할 수있는 편리한 컨트롤 개발자를 얻는 것입니다. 그런 다음 디자인 모드를 사용하여 속성을 설정할 수 있습니다. – Jonathan

+0

하지만 재귀 ListView를 가질 수 없습니까? : '(그렇게 멋진 솔루션이었을 것입니다.) –

관련 문제