嵌套 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 中的列表将其绑定。
我有一个嵌套的 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 中的列表将其绑定。