Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如果子转发器为空,如何显示转发器的子页脚?_Asp.net - Fatal编程技术网

Asp.net 如果子转发器为空,如何显示转发器的子页脚?

Asp.net 如果子转发器为空,如何显示转发器的子页脚?,asp.net,Asp.net,我的应用程序中嵌套了两个中继器,工作正常。如果子转发器为空,我希望显示页脚。由于我的代码是很长的html,我将只留下一个html的示例,然后发布我的完整代码,以便更好地理解。但一切都正常,除非当子转发器为空时,我想显示页脚消息 <asp:Repeater ID="ProductRepeater" runat="server" OnItemDataBound="ProductRepeater_ItemDataBound"> <HeaderTemplat

我的应用程序中嵌套了两个中继器,工作正常。如果子转发器为空,我希望显示页脚。由于我的代码是很长的html,我将只留下一个html的示例,然后发布我的完整代码,以便更好地理解。但一切都正常,除非当子转发器为空时,我想显示页脚消息

<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)行您必须找到子repeater
rptRelated
并进行检查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();
}