2011-07-05 7 views
8

Gdy Repeater nie zawiera żadnych elementów, to wcale nie jest renderowane w HTML, nawet HeaderTemplate lub FooterTemplate. Muszę manipulować nim po stronie klienta, nawet jeśli jest pusty.Renderuj pusty repeater

Czy istnieje sposób, aby zawsze renderować Repeater w HTML?

+2

'' FooterTemplate' HeaderTemplate' i powinny być nadal świadczone nawet jeśli źródło danych zwraca żadnych przedmiotów. Czy te szablony są puste w twoim przypadku? –

Odpowiedz

9

W polu dodaj etykietę z pustym tekstem danych i ustaw jej widoczną właściwość na wartość false.

<FooterTemplate> 
<table> 
<tr> 
<td> 
<asp:Label ID="lblEmptyData" 
     Text="No Data To Display" runat="server" Visible="false"> 
</asp:Label> 
</td> 
</tr> 
</table>   
</FooterTemplate> 

Teraz sprawdź dane podczas wiązania repeatera, jeśli żadne wiersze nie powrócą, pokaż etykietę, inaczej nie ma akcji.

Więcej szczegółów here.

1

Spróbuj

protected bool IsDataEmpty  
    {  
     get  
     {  
      ICollection list = Repeater1.DataSource as ICollection;  
      return list.Count == 0 ? true : false;  
     }  
    } 

W Markup:

<table width="80%"> 
    <tr runat="server" 

     visible='<%# IsDataEmpty %>'>  
     <td>  
      There is no data to display  
      </td>  
    </tr> 

za krok po kroku śledzić link: Link

8

jak @Saurabh powiedział korzystania <FooterTemplate> dodać etykietę z określeniem wiadomość we właściwości Text i ustaw jego widoczną właściwość na false:

<FooterTemplate> 
     <%-- Label used for showing Error Message --%> 
     <asp:Label ID="ErrorMessage" runat="server" Text="Sorry!!" Visible="false"> 
     </asp:Label> 
    </FooterTemplate> 

Następnie w kodzie źródłowym należy użyć następującej logiki; jeśli nie ma żadnych danych, wyświetli komunikat, w przeciwnym razie pokazują dane w następujący sposób:

protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    Repeater rpt = sender as Repeater; // Get the Repeater control object. 

    // If the Repeater contains no data. 
    if (rpt != null && rpt.Items.Count < 1) 
    { 
     if (e.Item.ItemType == ListItemType.Footer) 
     { 
      // Show the Error Label (if no data is present). 
      Label ErrorMessage = e.Item.FindControl("ErrorMessage") as Label; 
      if (ErrorMessage != null) 
      { 
       ErrorMessage.Visible = true; 
      } 
     } 
    } 
} 
+0

To jest lepsza, bardziej kompletna odpowiedź w rzeczywistości – BritishDeveloper

3
<asp:Repeater ID="rptList" runat="server" DataSourceID="odsList"> 
    ... 
    <FooterTemplate> 
     <%if (rptList.Items.Count == 0) 
      { %> 
      **Your message** 
     <%} %> 
    </FooterTemplate> 
</asp:Repeater> 
+0

Myślę, że 'rptList.Items' jest puste na PostBack, chyba że ponownie wywołasz DataBind(). Więc jest zastrzeżenie –