如何在 foreach 循环中找到页脚控件

How to find footer control in foreach loop

我有 Datalist,但无法在 foreach 循环中找到页脚控件。有帮助吗?

protected void btnactualapprove_Click(object sender, EventArgs e)
    {
        foreach (DataListItem dli in dtaddedOrderItem.Items)
         {
               DataList dtaddedsubserviceitem = (DataList)dli.FindControl("dtaddedsubserviceitem");
                foreach (DataListItem subdli in dtaddedsubserviceitem.Items)
                {
                   DataList dtsuggestedlist = (DataList)subdli.FindControl("dtsuggestedlist");
                    if (dtsuggestedlist != null)
                        {
                          // not comming inside
                        }
                  }
         }
    }

我无法找到 dtaddedsubserviceitem 数据列表页脚中的 dtsuggestedlist

在这里,我一直将 dtsuggestedlist 设为 null。

结构如下

Datalist dtaddedOrderItem start
<ItemTemplate>
   Datalist dtsuggestedlist start
     <ItemTemplate>
     </ItemTemplate>
     <FooterTemplate>
        Datalist dtsuggestedlist start
        Datalist dtsuggestedlist end
     </FooterTemplate>
   Datalist dtsuggestedlist end
</ItemTemplate>
Datalist dtaddedOrderItem end

我找不到位于 dtsuggestedlist 页脚的 dtsuggestedlist

简要

<asp:DataList ID="dtaddedOrderItem" runat="server">
     <ItemTemplate>
        <asp:DataList ID="dtaddedsubserviceitem" runat="server" >
           <ItemTemplate>
           </ItemTemplate>
            <FooterTemplate>
                 <asp:DataList ID="dtsuggestedlist" runat="server" >
                     <ItemTemplate>
                      </ItemTemplate>
                  </asp:DataList>
             </FooterTemplate>
      </asp:DataList>
    </ItemTemplate>
</asp:DataList>

  <asp:Button ID="btnactualapprove" OnClick="btnactualapprove_Click" />

试试这个:

foreach (DataListItem item in datalist1.Items)
{
   if (item.ItemType == ListItemType.Footer)
   {
       Label lbl = (Label)item.FindControl("Label1");
   }
}

使用以下修改后的代码:

DataListItem footer = (DataListItem)DataList1.Controls[DataList1.Controls.Count - 1];

你不能使用 foreach 因为它只会枚举类型为 Item/AlternatingItem 的项目并跳过 header/footer 等。但是你可以使用Controls.

这应该有效(通常):

DataListItem footer = (DataListItem)dataList.Controls[dataList.Controls.Count - 1];

这是嵌套数据列表的特殊情况:

protected void btnactualapprove_Click(object sender, EventArgs e)
{
    foreach (DataListItem dli in dtaddedOrderItem.Items)
    {
        DataList dl = (DataList)dli.FindControl("dtaddedsubserviceitem");
        DataListItem footer = (DataListItem)dl.Controls[dl.Controls.Count - 1];
        DataList dtsuggestedlist = (DataList)footer.FindControl("dtsuggestedlist");
        // ...
    }
}

Can u answer me how to find header?

是:

DataListItem header = (DataListItem)dl.Controls[0];

要在单击的按钮上获取页脚模板,从 DataList 的 Controls 进行迭代,这将允许您检查 DataList 的页脚:

foreach (DataListItem item in dtaddedOrderItem.Items)
{
    DataList dtaddedsubserviceitem = (DataList)item.FindControl("dtaddedsubserviceitem");

    foreach(Control control in dtaddedsubserviceitem.Controls)
    {
        DataListItem item = (DataListItem)control;

        if (item.ItemType == ListItemType.Footer)
        {
            DataList dtsuggestedlist = (DataList)footer.FindControl("dtsuggestedlist");
            if(dtsuggestedlist != null)
            {
                // do your code here
            }
        }
    }
}