[asp.net] Repeater, ListView, DataList, DataGrid, GridView… 무엇을 선택할까요?

선택할 수있는 다양한 컨트롤! ASP.NET에서 데이터를 표시하는 데 사용할 컨트롤을 결정하는 가장 좋은 방법은 무엇입니까?



답변

그것은 당신이 성취하려는 것에 관한 것입니다.

  • Gridview-제한된 디자인으로 html 테이블처럼 작동합니다. 편집 / 업데이트, 페이지, 정렬과 같은 내장 기능이 더 많이 있습니다. 많은 오버 헤드.

  • DataGrid-Gridview의 이전 버전입니다. gridview는 슈퍼 데이터 그리드입니다.

  • Datalist-더 많은 사용자 정의가 가능한 Gridview 버전. 또한 약간의 오버 헤드가 있습니다. 직접 디자인해야하므로 더 많은 수작업이 필요합니다.

  • ListView-새로운 Datalist :). 페이징을 사용하고 기능과 같은 Gridview에서 빌드 할 수 있지만 디자인의 자유가있는 데이터 목록과 그리드 뷰의 거의 하이브리드입니다. 이 제품군의 새로운 컨트롤 중 하나

  • 리피터-매우 가벼운 무게. 머리글, 바닥 글과 같은 기본 제공 기능이 없습니다. 최소한의 오버 헤드가 있습니다.


답변

다른 사람들은 그것을 쳤다 : 그것은 달려있다.

이제 특정 지침에 대해 (위의 WebDude의 탁월한 답변을 확장) …

디자인이 데이터의 자연스러운 스프레드 시트 또는 그리드보기에 적합합니까? GridView .

머리글과 바닥 글, 그리고 각 데이터 레코드에 대한 특정 컨트롤 및 / 또는 형식을 사용하여 목록 또는 기타 형식화 된 데이터보기를 표시해야합니까? (예를 들어, 사용자 정의 링크, 아마도 LinkButtons, 또는 특정 편집 컨트롤?)이 디스플레이는 특히합니까 하지 스프레드 시트 나 그리드보기에 자연스럽게 맞는? 목록보기

ListView의 모든 기준을 충족하지만 자연스럽게 그리드에 맞으면 DataList를 고려할 수 있습니다 .

나는 갈 리피터 난 그냥 몇 가지 기본적인 데이터가 일부 사용자 정의 디자인 비트, 아니 헤더, 아니 바닥 글, 좋은 깨끗 반복해야 할 때.


답변

마크 업보기

모든 3 (ListView, DataList, Repeater)에 대해 다음 샘플 코드 선언이 가능합니다.

<asp:ListView runat="server" OnItemCommand="Unnamed1_ItemCommand">
<ItemTemplate> <%# Eval("Name")%>    </ItemTemplate>
<asp:ListView>

다음 목록에서 각각에 대해 사용 가능한 템플릿과 옵션을보고 차이점을 직접 확인할 수 있습니다.

ListView (편집, 그룹, 삽입, 레이아웃 참고)

  • AlternatingltemTemplate
  • EditltemTemplate
  • EmptyDataTemplate
  • EmptyltemTemplate
  • GroupSeparatorTemplate
  • GroupTemplate
  • lnsertltemTemplate
  • ItemSeparatorTemplate
  • ItemTemplate
  • LayoutTemplate
  • SelectedltemTemplate

DataList (스타일 쌍 참고)

  • AlternatingltemStyle
  • AlternatingltemTemplate
  • EditltemStyle
  • EditltemTemplate
  • FooterStyle
  • FooterTemplate
  • HeaderStyle
  • HeaderTemplate
  • ItemStyle
  • ItemTemplate
  • 선택됨
  • SelectedltemTemplate
  • SeparatorStyle
  • SeparatorTemplate

연발총

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

코드보기 (고급보기)

CompositeDataBoundControl :

다음 클래스 계층 구조 (및 관련 컨트롤)를 살펴보십시오.

이러한 컨트롤은 템플릿에서 다른 asp.net 컨트롤을 호스팅하여 사용자에게 바인딩 된 데이터를 표시합니다.

CompositeDataBoundControl 클래스 (및 관련 컨트롤)

더 나은 설명을위한 몇 가지 설명

ListView 컨트롤

ListView 컨트롤은 데이터 표시를위한 템플릿도 사용합니다. 그러나 데이터 작업시 더 많은 시나리오를 허용하는 많은 추가 템플릿을 지원합니다. 이러한 템플릿에는 LayoutTemplate, GroupTemplate, ItemSeparatorTemplate이 포함 됩니다.

ListView 컨트롤 ( DataList 및 Repeater와 달리 )은 데이터 소스 컨트롤을 사용하여 데이터를 편집, 삽입 및 삭제하는 기능도 암시 적으로 지원합니다. 이러한 각 시나리오에 대해 개별 템플릿을 정의 할 수 있습니다.

DataList 컨트롤

DataList 컨트롤은 Repeater 컨트롤 처럼 작동합니다 . 데이터 세트의 각 행에 대해 데이터를 반복하고 정의 된 템플릿에 따라이 데이터를 표시합니다. 그러나 다양한 HTML 구조 내에서 템플릿에 정의 된 데이터를 레이아웃합니다. 여기에는 가로 또는 세로 레이아웃에 대한 옵션이 포함 되며, 흐름 또는 테이블 레이아웃으로 데이터를 반복하는 방법을 설정할 수도 있습니다 .

DataList 컨트롤은 데이터를 편집하기 위해 데이터 소스 컨트롤을 자동으로 사용하지 않습니다. 대신 이러한 시나리오에 대한 고유 한 코드를 작성할 수있는 명령 이벤트제공합니다 . 이러한 이벤트를 활성화하려면 템플릿 중 하나에 Button 컨트롤을 추가하고 단추의 CommandName 속성을 편집, 삭제, 업데이트 또는 취소 키워드로 설정합니다. 그런 다음 DataList 컨트롤에 의해 적절한 이벤트가 발생합니다.

리피터 컨트롤

Repeater 컨트롤은 템플릿을 사용하여 사용자 지정 바인딩도 정의합니다. 그러나 데이터를 개별 레코드로 표시하지 않습니다. 대신 템플릿에서 지정한대로 데이터 행을 반복합니다. 이를 통해 단일 데이터 행을 만들고 페이지 전체에서 반복 할 수 있습니다.

Repeater 컨트롤은 읽기 전용 템플릿입니다. 즉, ItemTemplate 만 지원합니다. 암시 적으로 편집, 삽입 및 삭제를 지원하지 않습니다. 이 기능이 필요한 경우 다른 컨트롤 중 하나를 고려해야합니다. 그렇지 않으면 Repeater 컨트롤에 대해 직접 코딩해야합니다 .


위의 설명은 MCTS Exam 70-515 Web Applications Development with Microsoft.NET Framework 4 책입니다.

DataGrid는이 책에서 언급되지도 않았으며 인기있는 GridView로 대체되고 다른 사용자가 친절하게 대답했습니다.


답변

과연! ASP.NET 4.0 데이터 도구 간의 차이점에 대해 블로그를 작성했습니다 . 기본적으로 gridview는 표 형식 정보를 표시하는 가장 강력한 방법 인 반면 ListView 컨트롤은 반복되는 데이터를 더 복잡하게 표시하기위한 것입니다. ASP.NET 초보자에게 조언을한다면 그리드 뷰를 안쪽으로 배우고 시작하는 다른 컨트롤은 무시하라고 말할 것입니다.


답변

모든 것은 데이터 레이아웃 방식에 달려 있습니다.

Repeater 또는 ListView를 사용할 때 레이아웃을 제어해야하는 경우 (테이블 대 CSS 대 기타). 둘 사이에서 ListView는 편집, 선택, 삽입을위한 더 많은 이벤트와 기본 제공 명령을 제공합니다. 추가로 페이징 및 그룹화 기능. Repeater는 매우 간단하며 데이터로 레이아웃을 반복합니다. 레이아웃을 직접 작성하고 있으므로 Listview 및 Repeater에 더 많은 코드가 필요합니다.

GridView는 업데이트 된 DataGrid이므로 DataGrid를 사용할 이유가 거의 없습니다. GridView는 표준 ASP.NET 데이터 소스에 연결할 때 정말 잘 작동하지만 레이아웃 규칙이 많은 테이블 형식 레이아웃으로 제한합니다. GridView는 기본 제공 레이아웃을 사용하므로 코드가 덜 필요합니다.


답변