嵌套 Class In ASP 转发器

Nested Class In ASP Repeater

我有一个嵌套的 class,其中包含一个订单的订单项目:

public class Order
{
  public int ItemID { get; set; }
  public int CustomerId { get; set; }
  ...
  public List<OrderItem> Items { get; set; }
}

public class OrderItem
{
  public int ItemId { get; set; }
  ...
}

并且我将此数据绑定到 asp 转发器

var result = [method to get data]
rptOrders.DataSource = result;
rptOrders.DataBind();

在 ascx 页面中我有

<asp:Repeater ID="rptOrders" runat="server" HideControlForZeroRows="true" ZeroRowsText="You have no orders.">
<HeaderTemplate>
    <table>
        <tr class="tableHeader">
            <td>Order #</td>
            ...
        </tr>
</HeaderTemplate>
<ItemTemplate>
<ItemTemplate>
    <tr>
        <td><a href='#'><%# Eval("ItemID") %></a></td>
        ...
    </tr>
</ItemTemplate>

但我想使用手风琴来显示隐藏订单详细信息,示例如下:http://jsfiddle.net/Xqk3m/,这意味着我必须为嵌套 class 项。

如何引用嵌套的 class 让另一个转发器遍历元素,为每个嵌套的项目添加一个?

我环顾了网络,通常他们建议我有一个嵌套的中继器,分别调用嵌套的 class 但我真的想利用我已经明确定义的事实 class是的。希望我可以做类似的事情:

//parent repeater
<asp:Repeater ID="rptOrders" runat="server" HideControlForZeroRows="true" ZeroRowsText="You have no orders.">
  ....
  //nested repeater
  <asp:Repeater ID="rptOrderItems" runat="server" HideControlForZeroRows="true">

但我如何才能参考订单的订单商品?

        <asp:Repeater runat="server" DataSource="<%# Container.DataItem %>">
        <ItemTemplate>
            <tr>
                <td><%# Eval("ItemId") %></td>
            </tr>
        </ItemTemplate>
    </asp:Repeater>

您可以将 ItemDataBound 事件添加到 rptOrders 转发器:

protected void rptOrders_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        var order = (Order)e.Item.DataItem;

        Repeater innerRep = e.Item.FindControl("rptOrderItems") as Repeater;

        innerRep.DataSource = order.Items;
        innerRep.DataBind();
    }

事实上,您可以在转发器项目中使用任何其他数据绑定控件,并使用 DataItem 中的列表将其绑定。