2011-07-05 8 views
8

Cuando Repeater no contiene elementos, no se procesa en HTML, incluso HeaderTemplate o . Necesito manipularlo en el lado del cliente, incluso si está vacío.Renderizar repetidor vacío

¿Hay alguna forma de representar siempre Repeater en HTML?

+2

'' HeaderTemplate' y FooterTemplate' todavía se dictarán incluso si la fuente de datos devuelve ningún elemento. ¿Están estas plantillas vacías en su caso? –

Respuesta

9

En el <FooterTemplate>, agregue una etiqueta con texto de datos vacío y establezca su propiedad visible en falso.

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

Ahora verifique los datos mientras se encuaderna el repetidor, si no hay filas, haga visible la etiqueta, de lo contrario, no se realizarán acciones.

Más detalles here.

1

Prueba este

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

en el marcado:

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

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

para el paso a paso siga el enlace: Link

8

como dijo @Saurabh, utilice <FooterTemplate> añadir una etiqueta con la especificación de su mensaje en la propiedad de texto y establecer su propiedad visible en falso como este:

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

Luego, en el código subyacente, utilice la siguiente lógica; Si no hay datos, mostrar el mensaje, de lo contrario, se muestran los datos de la siguiente manera:

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

Esta es la respuesta mejor y más completa actualmente – BritishDeveloper

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

Creo que 'rptList.Items' está vacío en PostBack a menos que vuelva a llamar a DataBind(). Entonces hay una advertencia –