2012-10-23 2 views
0

리피터를 사용하여 nested collection을 바인딩했습니다. 기본적으로 내가하고있는 일은 웹 페이지의 모든 요소 & 값을 표시하는 것입니다.리피터가 직렬화 가능한 DataStructures를 효율적으로 바인딩 할 수 있습니까

내 방식이있다

, 중첩 된 리피터를 사용하고 (아래 코드를 참조하시기 바랍니다)

각 &에 대한 모든 항목과 바인딩 컨트롤을 만들 수있는 사본 & 붙여 넣기 작업의 많은입니다 current ItemDataBount Eventa level below 리피터 데이터 소스를 결합하는 것을 데이터는 Eval을 사용합니다.

DataSource is serializable이라는 사실을 고려하면이 효율적인 &은 Nested Collections를 바인딩하는 가장 간단한 방법입니까?

<asp:Repeater ID="rpt1" OnItemDataBound="rpt1_ItemDataBound" runat="server"> 
    <ItemTemplate> 

     <asp:Label ID="lblSomeProperty" Text='<%#Eval("SomeProperty") %>' runat="server" /> 
     <%--few other controls--%> 
     <asp:Repeater ID="rpt2"OnItemDataBound="rpt2_ItemDataBound" runat="server"> 
      <ItemTemplate> 

      <asp:Label ID="Label1" Text='<%#Eval("SomeOtherProperty") %>' runat="server" /> 
       <asp:Repeater ID="rpt3" runat="server"> 
        <ItemTemplate> 
        <asp:Label ID="Label1" Text='<%#Eval("SomeMoreProperty") %>' runat="server" /> 
        </ItemTemplate> 
       </asp:Repeater> 

      </ItemTemplate> 
     </asp:Repeater> 

    </ItemTemplate> 
</asp:Repeater> 

코드 숨김 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     rpt1.DataSource = //RootElement IEnumerable 
    } 
} 

protected void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    //proceed only if ItemTemplate OR AlternatingItemTemplate 

    //populate user control values from DataItem in current context 
    var rpt2 = e.Item.FindControl("rpt2") as Repeater; 
    rpt2.DataSource = //Child Level1 IEnumerable 
} 

protected void rpt2_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    //bind rpt3 DataSource 
} 

당신의 도움에 감사드립니다.

답변

0

데이터 소스가 직렬화 될 수 있다면 데이터를 표시하려면 Repeater 대신 ListViews (MSDN)을 사용해야합니다. ListView를 사용하면 데이터 소스를 선언적으로 바인딩 할 수 있으므로 코드 숨김을 작성할 필요가 없습니다. 각 중계기를 바인딩하는 데 사용하는 모든 C# 코드를 효과적으로 제거 할 수 있습니다.

이 방법에 대한 자세한 설명은 StackOverflow answer을 참조하십시오.

키는 중첩 된 각 ListView 내의 마크 업에서 데이터 소스를 설정하는 것입니다.

0

귀하의 구현이 완벽하게 실현 가능할뿐만 아니라 효율적이라고 말하고 싶습니다. 이것이 리플 렉터를 사용하여 템플리트로 구성된 정보 모음을 표시하는 ".NET 방식"입니다.이 정보는 기본 또는 하위 데이터 모음이 될 수 있습니다.

과도하게 복잡해지는 것보다는 미래의 개발자를 위해 쉽게 이해할 수 있습니다. Repeater 컨트롤을 확장하고이를 사용하는 것과 관련된 추가 비즈니스 요구 사항이 없다면 어쨌든 시나리오에 대해 설명해 드리겠습니다. 필요가없는 복잡한 시나리오는 필요가 없습니다.

관련 문제