2009-07-15 53 views
1

如何停止從顯示中繼器的頭部模板當有數據源中沒有任何項目停止標題顯示在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()只能在數據綁定控件的上下文中使用。 – 2009-07-15 17:11:47

1

將一個空的文字控件放在那裏,並在OnItemDataBound函數中設置它的值(對於頁腳而言)。


嗯......或者哪怕是一點點簡單的給它正確的文本開始,但使用該文本的。可見屬性設置爲false,所以它不會呈現啓動。然後在OnItemDatabound中將其設置爲True。

4

右後您的DataBind()...


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; 
    } 
}