Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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
C# ASP中继器中的嵌套类_C#_Asp.net_Repeater - Fatal编程技术网

C# ASP中继器中的嵌套类

C# ASP中继器中的嵌套类,c#,asp.net,repeater,C#,Asp.net,Repeater,我有一个嵌套类,其中包含订单的订单项: 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; } ... } 在ascx页面上我

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

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; }
  ...
}
在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>

...
但是我想用一个手风琴来显示隐藏订单细节,这里有一个例子:,这意味着我必须为嵌套的类项目向repeater表中添加行

我如何引用嵌套类,让另一个repeater在元素上迭代,为每个嵌套项添加一个repeater

我环顾了一下web,他们通常建议我使用一个嵌套的repeater单独调用嵌套类,但实际上我想利用我有定义良好的类这一事实。希望我能做一些类似的事情:

//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();
    }
事实上,您可以在repeater项中拥有任何其他数据绑定控件,并使用list from DataItem对其进行绑定

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();
    }