[ASP.NET] Simular un EmptyDataTemplate en un DataList

Como sabréis, este tipo de template no está disponible en el control DataList (El GridView sí dispone de esta plantilla EmptyDataTemplate) para mostrar un mensaje informandole al usuario que no hay registros. Así que vamos a ver como con unas lineas de código podemos simularla:

Yo en mi caso voy a utilizar el FooterTemplate del DataList como sí se tratase de mi EmptyDataTemplate:

<FooterTemplate>
    <asp:Label ID="lblNoRecords" 
               runat="server" 
               Visible="false" 
               Text="No hay comentarios. Sea usted el primero."></asp:Label>
</FooterTemplate>

Dentro del FooterTemplate, añado un Label que será el que muestre el mensaje en caso de no haber registros (En este caso concreto, sino hay comentarios).

Una vez hecho esto, vamos al evento ItemDataBound del control y controlamos que el ItemType es del tipo Footer. Sí es, comprobamos que el número de registros es 0 y accedemos al label para ponerlo visible:

/// <summary>
/// Handles the ItemDataBound event of the dlComments control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.Web.UI.WebControls.DataListItemEventArgs"/> 
/// instance containing the event data.</param>
protected void dlComments_ItemDataBound(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Footer)
    {
        if (dlComments.Items.Count == 0)
        {
            Label lblNoRecords = e.Item.FindControl(ControlNames.LABEL_NORECORDS) as Label;
 
            if (lblNoRecords != null)
            {
                lblNoRecords.Visible = true;
            }
        }
    }
}

Con esto hemos conseguido simular dicha template.

Un saludo

Published 11/2/2010 9:00 por Luis Ruiz Pavón
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2010/02/11/asp-net-simular-un-emptydatatemplate-en-un-datalist.aspx