2010-07-28 4 views
8

나는 내가 사용하고있는 것보다 조금 더 동적 인 디스플레이가 필요하며, 필자가 필요로하는 답변을 찾지 못하는 것처럼 보입니다.중첩 된 리피터

     Customer a  Customer b  Customer c (and so on) 
    savings with product a 

    savings with product b 

    (and so on) 

각 필드에는 항상 최소 하나가 있습니다. 누군가 중첩 된 중계기 등을 사용한다고 말했습니다. 주변을 둘러 보았고 중첩 된 중계기를 사용하는 방법을 찾을 수 없었습니다. 나는 마감 시간에 있고 실제로 작동하는 것을 찾을 때까지는 물건으로 놀 수 없습니다.

이 작업을 수행하기 위해 사용해야하는 ASP 컨트롤은 무엇입니까? 좋은 예일 수 있지만 올바른 방향으로 도움이 필요합니다.

SQL을 사용하고 있지만 링크를 통해 데이터를 가져 오는 중입니다. 데이터는 목록으로 끝납니다.

도움 주셔서 감사합니다.

+0

와트는 데이터베이스에서 가져 오는 데이터의 모양입니까?이 정보, 설계에서 요구 사항, divs, 테이블을 사용하여 어떻게 표시해야합니까? –

답변

17

중첩 된 리피터는 매우 쉽습니다. 하여 외부 중계기의 템플릿이 고객의 이름과 중계기 및 내부 하나가 다른 저축을 가지고 있었다

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
{ 
    DataRowView row = (DataRowView)e.Item.DataItem; 

    Repeater nestedRepeater = e.Item.FindControl("NestedRepeater") as Repeater; 
    nestedRepeater.DataSource = getSavingsPerCustomer(row["customerID"]); 
    nestedRepeater.DataBind(); 
} 

를 다음을 수행 그냥 ItemTemplate을 하나 던져, 그리고 주요 중계기의 OnItemDataBound 이벤트

아마도 잘못된 구문이 있지만

<asp:repeater ID="outer"> 
<HeaderTemplate> 
    <div style="float:left"> 
</HeaderTemplate> 
<ItemTemplate> 
    Customer: <%= Eval(customer)%><br/> 
    <asp:repeater ID="NestedRepeater"> 
      <ItemTemplate> 
      Saving: <%= Eval(saving)%><br/> 
      </ItemTemplate> 
    </asp:repeater> 
</ItemTemplate> 
<FooterTemplate> 
    </div> 
</FooterTemplate> 
</asp:repeater> 

Similar SO question: Repeater in Repeater

1

AutoGenerateColumns = "true"인 GridView를 사용할 수 있습니다. 그러면 바인딩중인 데이터 소스를 기반으로 collumn이 생성됩니다.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"> 
</asp:GridView> 

이 클래스

public class A 
{ 
    public string Field1 { get; set; } 
    public int Field2 { get; set; } 
} 

그리고 해당하는 3 행과 필드 1과 필드 2라는 이름의 열을 가진 HTML 테이블을 생성합니다이 코드

GridView1.DataSource = new List<A>() { 
    new A() { Field1 = "a", Field2 = 1 }, 
    new A() { Field1 = "b", Field2 = 2 }, 
    new A() { Field1 = "c", Field2 = 3 }, 
}; 
GridView1.DataBind(); 

이를 생각 해보자. 이런 것.

differnt 열이있는 다른 소스로 데이터 소스를 변경하면 해당 열이 자동으로 생성됩니다.

3

나는이 질문에 대해 알고 아이디어를 얻을 datatable,하지만 개체와 동일한 작업을 수행하는 동안이 질문을 발견하고 대답을 찾지 못했고 다른 사람에게 유용 할 것이라고 생각했습니다.

당신이 개체를 중첩 된 객체를 사용하는 경우, 당신은 내가 다른 모든 답변에이 결론에 도달이

DataSource='<%# Eval("ChildDataSourceProperty") %>' 

같은 데이터 소스가 여기에 너무 복잡

을 내입니다 보이는 설정 전체 리피터 코드

<asp:Repeater ID="linkGroups" 
       runat="server" 
       DataSource="add your datasource"> 
    <ItemTemplate> 
     <dt><%# Eval("ParentProperty") %></dt> 
     <dd>     
      <asp:Repeater ID="links" 
          runat="server" 
          DataSource='<%# Eval("ChildDataSourceProperty") %>'> 
       <ItemTemplate> 
        <p><%# Eval("ChildObjectProperty") %></p> 
       </ItemTemplate> 
      </asp:Repeater> 
     </dd> 
    </ItemTemplate> 
</asp:Repeater>