Asp.net 如果子转发器为空,如何显示转发器的子页脚?
我的应用程序中嵌套了两个中继器,工作正常。如果子转发器为空,我希望显示页脚。由于我的代码是很长的html,我将只留下一个html的示例,然后发布我的完整代码,以便更好地理解。但一切都正常,除非当子转发器为空时,我想显示页脚消息Asp.net 如果子转发器为空,如何显示转发器的子页脚?,asp.net,Asp.net,我的应用程序中嵌套了两个中继器,工作正常。如果子转发器为空,我希望显示页脚。由于我的代码是很长的html,我将只留下一个html的示例,然后发布我的完整代码,以便更好地理解。但一切都正常,除非当子转发器为空时,我想显示页脚消息 <asp:Repeater ID="ProductRepeater" runat="server" OnItemDataBound="ProductRepeater_ItemDataBound"> <HeaderTemplat
<asp:Repeater ID="ProductRepeater" runat="server" OnItemDataBound="ProductRepeater_ItemDataBound">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<table>
<tr>
<td>
<%#Eval("Name")%>
</td>
<tr>
</table>
<pre>
<asp:Repeater ID="ChildRepeater" runat="server">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<table>
<tr>
<td>
<%#Eval("Description")%>
<td>
</tr>
<table>
</itemTemplate>
<FooterTemplate>
<div>
<h5>
<asp:Label ID="lblDefaultMessage" runat="server" Text="This is empty. " Visible="false" ForeColor="Red" Font-Size="Large">
</asp:Label>
</h5>
</div>
</FooterTemplate>
</asp:Repeater>
</pre>
</ItemTemplate>
</asp:Repeater>
<protected void ProductRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string category = "Value"
Repeater rptRelated = e.Item.FindControl("ChildRepeater") as Repeater;
rptRelated.DataSource = getChild(category);
rptRelated.DataBind();
if (rptRelated.Items.Count < 1)
{
if (e.Item.ItemType == ListItemType.Footer)
{
Label lblDefaultMessage = (Label)e.Item.FindControl("lblDefaultMessage");
lblDefaultMessage.Visible = true;
}
}
}
}
找到中继器,如:
Label lblDefaultMessage =
(Label)rptRelated.Controls[rptRelated.Controls.Count-1].FindControl("lblDefaultMessage");
并从Repeater的页脚找到控件,如:
protected void ChildRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
Control ctrl = (sender) as Control;
Repeater rptRelated = ctrl.Parent.NamingContainer as Repeater;
if (rptRelated.Items.Count < 1)
{
if (e.Item.ItemType == ListItemType.Footer)
{
Label lblDefaultMessage = (Label)rptRelated.Controls[rptRelated.Controls.Count-1].FindControl("lblDefaultMessage");
lblDefaultMessage.Visible = true;
}
}
}
将其添加到子中继器的OnItemDataBound
事件中,而不是父事件中
<asp:Repeater ID="ChildRepeater" runat="server"
OnItemDataBound="ChildRepeater_ItemDataBound">
protectedvoid ChildRepeater\u ItemDataBound(对象发送方,RepeaterItemEventArgs e)
{
控件ctrl=(发送方)作为控件;
Repeater rptRelated=ctrl.Parent.NamingContainer作为中继器;
如果(rptRelated.Items.Count<1)
{
if(e.Item.ItemType==ListItemType.Footer)
{
Label lblDefaultMessage=(Label)rptcrelated.Controls[rptcrelated.Controls.Count-1].FindControl(“lblDefaultMessage”);
lblDefaultMessage.Visible=true;
}
}
}
活动是:
Repeater rptRelated = e.Item.FindControl("ChildRepeater") as Repeater;
Label lblDefaultMessage = (Label)e.Item.FindControl("lblDefaultMessage");
var ds = getChild(category);
lblDefaultMessage.Visible = ds != null && ds.Rows.Count != 0;
if (rptRelated != null)
{
rptRelated.DataSource = ds;
rptRelated.DataBind();
}
中继器没有空数据模板像网格视图。
您应该将页脚内容放在中继器旁边,并更改“数据绑定”代码,如下所示:
我将无法访问子repeater中的rptRelated.Items.Count。它还会在异常所在的行上抛出system.nullReference exception。如果(rptRelated.Items.Count<1)行您必须找到子repeaterrptRelated
并进行检查getChild()方法返回一个数据表,因此我似乎无法访问ds.Any()从中可以使用ds.Rows.Count!=而不是0
Repeater rptRelated = e.Item.FindControl("ChildRepeater") as Repeater;
Label lblDefaultMessage = (Label)e.Item.FindControl("lblDefaultMessage");
var ds = getChild(category);
lblDefaultMessage.Visible = ds != null && ds.Rows.Count != 0;
if (rptRelated != null)
{
rptRelated.DataSource = ds;
rptRelated.DataBind();
}