在3级转发器中查找嵌套转发器

时间:2014-03-21 13:39:00

标签: asp.net repeater

我有一个3级asp.net转发器,我需要找到第3级的项目。代码隐藏也发布在下面。

这是我的aspx代码:

<div class="container">
        <asp:Repeater runat="server" ID="rptGrp0" OnItemDataBound="rptGrp0_ItemDataBound">
            <HeaderTemplate>
                <div id="Grp0" class="rptParent">
            </HeaderTemplate>
            <ItemTemplate>
                <div id="rptParent <%# Eval("Name") %>">
                    <div class="row-fluid">
                        <div class="span12">
                            <h5 class="parentTitle"><%# Eval("Name") %></h5>
                        </div>
                    </div>
                </div>
                <div class="group">
                    <div id="rptChild <%# Eval("Name") %>">
                        <div>
                            <asp:Repeater runat="server" ID="rptGrp1" OnItemDataBound="rptGrp1_ItemDataBound">
                                <HeaderTemplate>
                                    <div id="Grp1" class="rptChild">
                                </HeaderTemplate>
                                <ItemTemplate>
                                    <div class="group">
                                        <div id="rptGrandChildHeader <%# Eval("Name") %>">
                                            <div class="content">
                                                <div class="container">
                                                    <div class="row-fluid">
                                                        <div class="span12">
                                                            <p class="blue">
                                                                <asp:Label runat="server" ID="lblChildName" Text='<%# Eval("Name") %>'></asp:Label>
                                                            </p>
                                                        </div>
                                                    </div>
                                                </div>
                                            </div>
                                        </div>
                                        <div id="rptGrandChild <%# Eval("Name") %>">
                                            <asp:Repeater runat="server" ID="rptContent">
                                                <HeaderTemplate>
                                                    <div class="c_module">
                                                        <div class="container">
                                                            <div class="row-fluid">
                                                                <div class="span12">
                                                                    <div class="data_controls">
                                                                        <div class="clearfix"></div>
                                                                    </div>
                                                                    <div class="d_table_module">
                                                                        <table border="0" class="display" id="tblContent">
                                                                            <thead>
                                                                                <tr>
                                                                                    <th>Product</th>
                                                                                </tr>
                                                                            </thead>
                                                                            <tbody>
                                                </HeaderTemplate>
                                                <ItemTemplate>
                                                    <tr>
                                                        <td style="width:100px;">
                                                            <asp:Label runat="server" ID="lblProduct" Text='<%# Eval("Product") %>'></asp:Label>
                                                        </td>
                                                    </tr>
                                                </ItemTemplate>
                                                <FooterTemplate>
                                                                            </tbody>
                                                                        </table>
                                                                    </div>
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                </FooterTemplate>
                                            </asp:Repeater>
                                        </div>
                                    </div>
                                </ItemTemplate>
                            <FooterTemplate>
                                </div>
                            </FooterTemplate>
                        </asp:Repeater>
                        </div>
                    </div>
                </div>
            </ItemTemplate>
            <FooterTemplate>
                </div>
            </FooterTemplate>
        </asp:Repeater>
    </div>

这是我的代码隐藏。

protected void lnkButton_Click(object sender, EventArgs e)
{
    Repeater primary = (Repeater)this.FindControl("rptGrp0");
    if (primary != null)
    {
        // Items.Count = 0.
        foreach (RepeaterItem item in primary.Items)
        {
            Repeater secondary = (Repeater)item.FindControl("rptGrp1");
            if (secondary != null)
            {
                foreach (RepeaterItem b in secondary.Items)
                {
                    Repeater target = (Repeater)b.FindControl("rptContent");
                    if (target != null)
                    {
                        foreach (RepeaterItem c in target.Items)
                        {
                        }
                    }
                }
            }
        }
    }
}

问题是我的repeater.Items.Count是0。

请指教,谢谢。

3 个答案:

答案 0 :(得分:0)

Repeater仅在与DataSource绑定时才会显示。确保您的转发器与正确的DataSource绑定。

答案 1 :(得分:0)

查找第3个中继器的项目取决于您开始时如何对其进行数据绑定。如果您在Page_Load事件中绑定数据,则在处理Click事件后绑定数据。在lnkButton_Click事件中,转发器的内容尚未绑定。访问这些项目的最简单方法是使用Item_DataBound事件来访问这些项目。

示例代码:

<asp:Repeater runat="server" ID="rptContent" OnItemDataBound="rptContent_ItemDataBound">
...
</asp:Repeater>

代码背后:

protected void rptContent_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    e.Item; // This current item

    Repeater rpt = (Repeater)(sender);
    rpt.Items; // All items

    //Do some condition here to test on the item for whatever you want to do
    if(e.Item == someCondition)
        // some operation here
}

答案 2 :(得分:0)

好的,我找到了解决方案。它与ASP.NET页面生命周期有关。

在lnkBut​​ton_Click事件之后,发生了回发,但我需要在回发时“重新绑定”转发器数据源,而不仅仅是初始page_load。

e.g。

protected void Page_Load()
{
    if (!IsPostBack)
    {
        // bind control
    }
    else
    {
        // rebind control
    }
}