使用VS 2008,我有一个Repeater控件:
<asp:Repeater runat="server" ID="storesRep" DataSourceID="storeSqlDataSource"
OnItemDataBound="StoresRep_ItemDataBound">
<ItemTemplate>
<table style="padding:0px">
<tr>
<td style="width:200px"><asp:Label ID="infoLbl" runat="server">
Choose stores for upload:</asp:Label>
</td>
<td style="width:110px">
<asp:Label ID="storeLbl" runat="server" Text='<%# Bind("Name") %>'>
</asp:Label>
</td>
<td><asp:CheckBox runat="server" ID="storeCheck" /></td>
</tr>
</table>
</ItemTemplate>
</asp:Repeater>
<asp:SqlDataSource ID="storeSqlDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:someConnectionString %>"
SelectCommand="SELECT [StoreId], [Name] FROM [Store] Order By [Name]">
</asp:SqlDataSource>
Run Code Online (Sandbox Code Playgroud)
现在,如果数据源没有从数据库返回任何项目,我想显示默认文本,如"找不到商店".到目前为止,我主要使用的GridView
是因为EmptyDataText
属性而没有问题的地方.
AGu*_*ald 75
Joaos的答案甚至可以简化.在页脚中,不要将默认项的visible-property设置为false,而是使用以下表达式:
<FooterTemplate>
<asp:Label ID="defaultItem" runat="server"
Visible='<%# YourRepeater.Items.Count == 0 %>' Text="No items found" />
</FooterTemplate>
Run Code Online (Sandbox Code Playgroud)
这样,您可以保存代码.
bre*_*eez 30
另一种可能性
<FooterTemplate>
<asp:Label ID="lblEmptyData" runat="server" Visible='<%# ((Repeater)Container.NamingContainer).Items.Count == 0 %>' Text="No items found" />
</FooterTemplate>
Run Code Online (Sandbox Code Playgroud)
此代码段的好处是您不依赖于分配给转发器的ID.
Joã*_*elo 27
您可以Repeater
通过FooterTemplate
结合OnItemDataBound
事件使用不支持内置方式来完成您正在执行的操作的事实,并仅在数据源不返回任何项目时显示页脚.
有关如何执行此操作的示例,请访问:
更好的是:这个子类添加了一个EmptyDataTemplate属性.在您的标记中,像元素一样放入元素.默认情况下,如果没有数据,这将隐藏页眉和页脚; 您可以使用标记中的HeaderVisibleWhenEmpty和FooterVisibleWhenEmpty属性更改此设置.
public class RepeaterWithEmptyDataTemplate : Repeater
{
public virtual ITemplate EmptyDataTemplate { get; set; }
protected virtual bool DefaultHeaderVisibleWhenEmpty
{
get { return false; }
}
protected virtual bool DefaultFooterVisibleWhenEmpty
{
get { return false; }
}
public bool HeaderVisibleWhenEmpty
{
get { return ViewState["hve"] == null ? DefaultHeaderVisibleWhenEmpty : (bool) ViewState["hve"]; }
set { ViewState["hve"] = value; }
}
public bool FooterVisibleWhenEmpty
{
get { return ViewState["fve"] == null ? DefaultFooterVisibleWhenEmpty : (bool) ViewState["fve"]; }
set { ViewState["fve"] = value; }
}
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding(e);
if (Items.Count == 0 && EmptyDataTemplate != null)
{
var emptyPlaceHolder = new PlaceHolder {ID = "empty", Visible = true};
EmptyDataTemplate.InstantiateIn(emptyPlaceHolder);
//figure out where to put placeholder
RepeaterItem footer =
Controls.OfType<RepeaterItem>().FirstOrDefault(i => i.ItemType == ListItemType.Footer);
if (footer == null)
{
//add to end if no footer
Controls.Add(emptyPlaceHolder);
}
else
{
Controls.AddAt(Controls.IndexOf(footer), emptyPlaceHolder);
}
//hide header and footer according to properties.
foreach (RepeaterItem x in Controls.OfType<RepeaterItem>())
{
switch (x.ItemType)
{
case ListItemType.Header:
x.Visible = HeaderVisibleWhenEmpty;
break;
case ListItemType.Footer:
x.Visible = FooterVisibleWhenEmpty;
break;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
标记示例:
<myprefix:RepeaterWithEmptyDataTemplate runat=server>
<ItemTemplate>blah blah blah</ItemTemplate>
<EmptyDataTemplate>Hey, no data!</EmptyDataTemplate>
</myprefix:RepeaterWithEmptyDataTemplate>
Run Code Online (Sandbox Code Playgroud)
请注意,必须调用DataBind方法,否则不会显示emptydatatemplate.
归档时间: |
|
查看次数: |
50872 次 |
最近记录: |