【问题标题】:Bind a repeater dynamically inside another repeater?在另一个中继器内动态绑定中继器?
【发布时间】:2014-01-16 02:24:21
【问题描述】:

我有这个代码:

<asp:Repeater id="repeaterCategories" runat="server">
    <ItemTemplate>
        <div class="categorie-item">
            ...

            <asp:Repeater id="repeaterSubCategories" runat="server">
                <ItemTemplate>
                    ...
                </ItemTemplate>
            </asp:Repeater>
        </div>                    
    </ItemTemplate>
</asp:Repeater>

对于每个repeaterCategoriesrepeaterSubCategories 必须是 repeaterCategories.SubCategories。所以我必须动态绑定(对于每个第一次转发器迭代)子类别列表。

我可以吗?怎么样?

【问题讨论】:

    标签: c# data-binding repeater


    【解决方案1】:

    如果您有这样的嵌套中继器:

    <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
        <ItemTemplate>
            <asp:Repeater ID="Repeater2" runat="server"></asp:Repeater>
        </ItemTemplate>
    </asp:Repeater>
    

    您可以使用它来绑定它:

    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        var data = ((MyClass)e.Item.DataItem).Subcategories;
        var repeater2 = (Repeater)e.Item.FindControl("Repeater2");
        repeater2.DataSource = data;
        repeater2.DataBind();
    }
    

    【讨论】:

    • 嗯,但是如何为每个 Repeater2 绑定 Repeater1.SubCategories
    • 编辑了我的答案,包括如何将 DataItem 转换为 e 到您的班级和子类别。
    • (Repeater)e.Item.FindControl("Repeater2");重要 vs ((Repeater)Repeater1.FindControl("Repeater2") . :) 谢谢。
    • 这太棒了,但是如果子中继器的数据中需要父中继器的 DataTable,例如,该怎么办?您是否建议将 DataTable 设为全局,以便在 ItemDataBound 中使用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多