My asp:Repeater wish

Published 02 April 04 05:10 PM | alexcampbell

How hard would it have been to include a <NoDataTemplate> that displays when the Datasource has 0 rows?

I know there are ways around this
<asp:Placeholder visible='<%# (MyContainer.Items.Count > 0) %>'>
but I wish MS had included it in the framework.

Comments

# Johnny Hall said on April 2, 2004 03:09 AM:

Try something like this:

public class ExtendedRepeater : Repeater
{
#region Private

private string _messageCssClass;
private string _noDataMessage;

#endregion

#region Properties

public string MessageCssClass
{
get { return _messageCssClass; }
set { _messageCssClass = value; }
}

public string NoDataMessage
{
get { return _noDataMessage; }
set { _noDataMessage = value; }
}

#endregion

protected override void OnPreRender(EventArgs e)
{
base.OnDataBinding (e);

if (this.Items.Count == 0)
{
this.FooterTemplate = new EmptyTemplate(this.NoDataMessage, this.MessageCssClass);
this.FooterTemplate.InstantiateIn(this);
}
}
}

public class EmptyTemplate : ITemplate
{
#region Private

private string _messageCssClass;
private string _noDataMessage;

#endregion

#region Constructor

public EmptyTemplate(string noDataMessage, string messageCssClass)
{
_messageCssClass = messageCssClass;
_noDataMessage = noDataMessage;
}

#endregion

#region ITemplate Members

public void InstantiateIn(Control container)
{
HtmlGenericControl layout = new HtmlGenericControl("div");
layout.Attributes.Add("class", _messageCssClass);
layout.Style.Add("width", Unit.Percentage(100).ToString());
layout.InnerText = _noDataMessage;

container.Controls.Add(layout);
}

#endregion
}

# Johnny Hall said on April 2, 2004 03:11 AM:

And then:

<my:ExtendedRepeater id="_repeater" runat="server" NoDataMessage="What data?">

...


# Ryan Gregg said on April 2, 2004 09:26 AM:

I'll have to check out Johnny's extended repeater, but I certainly agree it's a shame this wasn't included in the original release. Same for DataGrid and DataList as well. Maybe we can hope for this in a 2.0 release.

# Fredrik Normén said on April 2, 2004 04:23 PM:

The GridView, FormView and DetailsView have a <EmptyDataTemplate>, it will be displayed when the data source that is bound to the controls does not contain any records.