2009-07-15 4 views
1

데이터 소스에 항목이 없을 때 repeater의 헤더 템플리트가 표시되지 않게하려면 어떻게해야합니까?asp.net 중계기에 표시 중지 헤더

   <asp:Repeater ID="TabsRepeater" runat="server" DataSource='<%#Eval("OrderedChildNodes") %>'> 
       <HeaderTemplate> 
        <ul class="child"> 
       </HeaderTemplate> 
       <ItemTemplate> 

리피터가 다른 리피터 컨트롤에 중첩되어 있으므로 데이터 바인딩 전에 점검 할 수 없습니다.

답변

1

마크 업을 조건부로 만들 수도 있습니다 (아래의 예는 테스트되지 않음).

<asp:Repeater ID="TabsRepeater" runat="server" DataSource='<%#Eval("OrderedChildNodes") %>'> 
       <HeaderTemplate> 
      <% if ( ((yourType)Eval("OrderedChildNodes")).Count > 0) %> 
        <ul class="child"> 
       </HeaderTemplate> 
       <ItemTemplate> 
+0

그 내 생각은 처음 생각했지만 오류를주는 것 같지 않습니다. Eval(), XPath() 및 Bind()와 같은 데이터 바인딩 방법은 데이터 바인딩 된 컨트롤의 컨텍스트에서만 사용할 수 있습니다. –

+1

우연히 .Net 3.5 프레임 워크 이상을 사용하고 계십니까? 그렇다면 빈 데이터를 처리 할 수있는 유틸리티가있는보다 유연한 ListView 컨트롤로 리피터 컨트롤을 대체하는 것이 좋습니다. – James

1

거기에 빈 리터럴 컨트롤을 넣고 OnItemDataBound 함수에서 값을 설정합니다 (바닥 글과 동일).


흠 ... 나 조금이라도 간단하게 그것을 올바른 텍스트를 처음 제공하지만 렌더링하지 않도록 false로 설정의 리터럴 .Visible 속성을 시작합니다. 그런 다음 OnItemDatabound에서 True로 설정하십시오.

4

마우스 오른쪽 후 데이터 바인딩() ...


TabsRepeater.Visible = TabsRepeater.Items.Count > 0; 

나는 그것이 당신이 싶지 않을 것이다 바닥 글 템플릿에서 </UL >을 프로그래머 있으리라 믿고있어 있기 때문 보이지 않는 전체 중계한다 어느 쪽이든을 보여주십시오.

0

이 방법에 대해 :

<HeaderTemplate> 
    <ul class="child" visible='<%= (TabsRepeater.Items.Count > 0).ToString() %>'> 
</HeaderTemplate> 
0

이 IE9을 위해 일해야 +

ASPX :

<asp:Repeater runat="server" ID="rpHideHeaderIfNoData"> 
    <HeaderTemplate> 
     <table class="hide-if-no-data"> 
      <tr> 
       <th>ID</th> 
       <th>Name</th> 
      </tr> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td><%# ((MyModel)Container.DataItem).ID %></td> 
      <td><%# ((MyModel)Container.DataItem).Name %></td> 
     </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

CSS :

.hide-if-no-data { 
    tr:only-child { 
     display: none; 
    } 
}