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?
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?
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.
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
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;
}
}
}
}
Esta es la respuesta mejor y más completa actualmente – BritishDeveloper
<asp:Repeater ID="rptList" runat="server" DataSourceID="odsList">
...
<FooterTemplate>
<%if (rptList.Items.Count == 0)
{ %>
**Your message**
<%} %>
</FooterTemplate>
</asp:Repeater>
Creo que 'rptList.Items' está vacío en PostBack a menos que vuelva a llamar a DataBind(). Entonces hay una advertencia –
'' 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? –